题目描述
实现一个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,都指向构造函数的原型
总结
需要理解原型链,这部分太复杂,给出两幅图自行感悟吧
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!