new 操作符新建一个对象;
-
创建一个空对象:var obj={};
-
通过call 获取函数传参:var arg=Array.prototype.slice.call(arguments,1);
-
将空对象的原型链属性指向构造函数的的原型:obj.proto=Fn.prototype;实现原型继承,使得新对象可以访问到构造函数原型中的属性;
-
将空对象的原型链属性设置构造函数,为了实例化Fn;obj.proto.constructor=Fn;
-
将空对象指向构造函数:Fn.apply(obj,arg);
-
返回一个新对象;
var new=function(Fn){ var obj={}; var arg=Array.prototype.slice.call(arguments,1); obj.__proto__=Fn.prototype; obj.__proto__.constructor=Fn; Fn.apply(obj,arg); return obj; }