1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| /** * new 一个构造函数之后,在构造函数内部做了如下几件事 * 1、创建一个Object实例 * 2、改变原型链 * 3、调用构造函数,并将它的this指向第一步创建的实例 * 4、返回结果 */
function myNew() { const angs = [...arguments]
// 1、创建一个实例 const obj = new Object()
// 2、改变实例原型链,实现继承 const Con = angs.shift() obj.__proto__ = Con.prototype
// 调用构造函数,并将内部this指向实例 const ret = Con.aplly(obj, args)
// 如果构造函数返回的结果是对象,则返回这个对象 // 否则返回第一步创建的实例对象 if (typeof ret === 'object') { return ret }
return obj }
|