new 操作符都做了些什么

2019-07-13  本文已影响0人  南蓝NL
function Foo(name){
   console.log(arguments);
   this.name = name; 
}
let a = new Foo('2');
function _new(){
   // 创建一个空对象
   let target = new Object();
   let [constructor,...args] = [...arguments];
   // 将这个空对象的 __proto__ 指向这个构造函数的prototype
   target.__proto__ = constructor.prototype;
    // 执行这个构造函数,将属性或者方法添加到创建的对象上
   let result = constructor.apply(target, args);
   //   如果构造函数创建的不是一个对象,那么返回这个对象
   if(result&&typeof (result) == 'function' && typeof (result) == 'object'){
       return result;
   }
   // 如果构造函数函数的不是一个对象,返回创建的新对象
   return result;
}
上一篇 下一篇

猜你喜欢

热点阅读