要想用js实现new操作符,首先需要清楚当我们使用new来新建一个对象时,这个过程中都发生了什么
new一个对象过程发生了什么
- 创建一个新的对象,例如var Person = {};
- 新对象的_proto_属性指向构造函数的原型对象prototype;
- this指向新对象;
- 执行构造函数中的代码;
- 返回这个新对象
用js实现new操作符
function CopyNew(Obj, ...args) {
var newObj = {} //新建一个对象
newObj._proto_ = Obj.prototype //使_proto_指向构造函数的原型
var result = Obj.call(newObj, ...args) //改变this指向并且执行构造函数中的代码
return typeof result === 'object' ? result : newObj //返回新对象
}