题目描述
实现一个new关键字
思路分析
new关键字用来创建对象。那么创建对象时都做了些什么
- 创建了一个对象
- 确定this的指向
- 执行构造函数
- 返回这个对象
代码实现
function newFn(ConstructorFn, ...args) {
//创建一盒新对象
let obj = {}
//将__proto__指向构造函数的原型
obj.__proto__ = ConstructorFn.prototype
//执行构造函数,绑定this
let res = ConstructorFn.apply(obj, args)
//返回对象
return typeof res === 'object' ? res : obj
}
function Person(name, age) {
this.name = name
this.age = age
}
var per1 = newFn(Person, '张三', 28)
// console.log(per1.__proto__ == per2.__proto__)
console.log(per1)
const per2 = new Person('李四', 29)
console.log(per2)
console.log(per1.__proto__ == per2.__proto__) //true,都指向构造函数的原型
复制代码
总结
需要理解原型链,这部分太复杂,给出两幅图自行感悟吧
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END