new操作符解读
话说把大象装进冰箱需要三步,那么new一个对象出来,需要多久?
- 创建一个空的简单JavaScript对象(即{});
- 为步骤1新创建的对象添加属性__proto__,将该属性链接至构造函数的原型对象 ;
- 将步骤1新创建的对象作为this的上下文 ;
- 如果该函数没有返回对象,则返回this。
转换成代码,如下:
function MyNew (fn){
// 创建新的空对象
var obj = {};
// 将控对象的原型指向构造函数的原型
obj.__proto__ = fn.prototype;
// 将控对象的构造函数指向构造参数
obj.constructor = fn
// 执行构造函数
fn().call(this);
// 返回对象
return obj
}