Skip to main content

new

1.new 一个对象的过程:

a.创建一个空对象,将这个空对象的__proto__属性指向这个构造函数的原型上

b.将空对象作为构造函数的this,并运行

c.如果构造函数的返回结果为对象或函数,将返回结果作为new的结果

d.如果不为对象、函数,将原空对象作为结果返回

function _new () {
​ var target = {};
​ var [_constructor,...args] = arguments;
​ target.__proto__ = _constructor.prototype;
​ var result = _constructor.apply(target,args);
​ if ((typeof result === 'object' || typeof result === 'function') && result!==null) {
​ return result;
​ }
​ return target;
}