回想我们平时怎么使用new的
function Person(age){
this.age = age;
}
let person = new Person(10);
可见new 接受的是一个构造函数。
总结下new的执行过程:
- 创建一个空对象。
- 进行原型连接,
- 调用我们的构造函数,并将该构造函数的this指定为我们创建的空对象。
- 如果我们的构造函数没有返回值,那么我们就返回我们创建的这个对象,否则就返回构造函数所返回的结果。
let _new = function(constroctor,...param){
let obj = {};
obj.__proto__=constroctor.prototype;
let result = constroctor.apply(obj,param);
return result instanceof Object?result:obj;
}
function Person(age){
this.age = age;
}
let p1 = _new(Person,10);
console.log(p1);
//Person {age: 10}
//age: 10
//__proto__:
// constructor: ƒ Person(age)
//__proto__: Object