new

200 阅读1分钟
function _new(Func, ...args){ 
   //1.创建实例对象 
   // let obj = {}; 
   //2.给obj.__proto__赋值
   // obj.__proto__ = Func.prototype; __proto__在IE中不兼容 
   // 优化创建:let obj = Object.create(Func.prototype); 
   //3.把方法执行,让里面的this是实例对象 
   let result =	Func.call(obj, ...args); 
   //4.分析返回结果 
   if(result!==null && /^(object|function)$/.test(typeof result)) return result; 
   return obj; 
}

// 1.创建一个空对象
var obj = new Object()
// 2.将空对象的原型赋值为构造函数的原型
obj.__proto__ = Perons.prototype
// 3.变更构造函数内部this,将其指向刚刚创建出来的对象
Perons.call(obj)
// 4.返回对象
return obj

相关文章参考:

juejin.cn/post/684490…