思考:new操作符干了什么?
- 创建一个新对象。
- 创建的对象将被[[Prototype]]链接到这个函数的prototype对象上。
- 使this指向新创建的对象。
- 返回该中间对象,即返回实例对象
function New() {
let Foo = Array.prototype.shift.call(arguments);//获取函数,arguments长度减一
let res = Object.create(Foo.prototype);//创建新对象,并且链接Foo.prototype
let result = Foo.apply(res,arguments);//执行构造函数,改变this指向
// 确保 new 出来的是个对象 返回的值是什么就return什么
return typeof result === 'object' ? result : res;
}
function Person(name,age) {
this.name = name;
this.age = age;
this.getName = function () {
return this.name;
}
}
let obj1 = New(Person,'jack',18)
let obj2 = new Person('jack',18)
console.log(obj1);
console.log(obj2);