new操作符具体干了什么
- 创建一个空对象,并且this变量引用该对象(将构造函数的作用域赋给新对象),同时还继承了该函数的原型
- 为这个新对象添加属性、方法
- 新创建的对象由this所引用,并且最后隐式的返回this(返回新对象)
实现:
function myNew(ctr) {
let obj = {};
obj.__proto__ = ctr.prototype;
const args = [...arguments].slice(1);
console.log(args);
let result = ctr.apply(obj, args);
var isObj = (typeof result === 'object' && result !== null);
return isObj ? result : obj;
}
function Person(name, age) {
this.name = name;
this.age = age
}
let p = myNew(Person, 'jack', 'kk');
console.log(`p:`, p);