实现 new 操作符
new操作符作用: 创建一个给定构造函数的实例
- 原理
- (1)创建一个空对象;
- (2)将空对象的[prototype]原型指向构造函数的原型对象;
- (3)将构造函数的执行上下文this绑定到空对象;
- (4)返回空对象
/**
\* @param {Function} construct 构造函数
\* @param {any} args 其余参数
\* @return obj 绑定了构造函数上下文的空对象
*/
function myNew(construct, ...args) {
let obj = {} //创建空对象
obj.__proto__ = construct.prototype //将空对象的[prototype]原型指向构造函数的原型对象
construct.apply(obj, args) //将构造函数的执行上下文this绑定到空对象
return obj
}
//-----------------------------------------使用-------------------------------------------------------
function Person(name, age) {
this.name = name
this.age = age
}
let person1 = myNew(Person, 'joker', 20)
console.log(`name is ${person1.name}, age is ${person1.age}`)
About 32 min