new的实现原理【冲击30K专栏02】
最近刚好换了工作,把最近面试被面的问题,以及现在大多数出现的面试题以一个专题的形式一次性总结,一天一题,现在总共汇总了
150道题
,如果这些题都能答出来人人都能冲击30k
,每道题目答案没有多余扯皮的部分,就是单纯的答案。
今天的题目:new的实现原理?
1、创建一个空对象 obj 2、将该对象 obj 的原型链 proto 指向构造函数的原型 prototype, 并且在原型链 proto 上设置 构造函数 constructor 为要实例化的 Fn 3、传入参数,并让 构造函数 Fn 改变指向到 obj,并执行 4、最后返回 obj
例子
类对象
function User(userAge, userName) {
this.userAge = userAge
this.userName = userName
}
User.prototype.showInfo = function() {
console.log('this.userAge :', this.userAge)
console.log('this.userName :', this.userName)
}
模拟new运算符功能函数
function myNew() {
let obj = {}
let arg = Array.prototype.slice.call(arguments, 1)
obj.__proto__ = Fn.prototype
obj.__proto__.constructor = Fn
Fn.apply(obj, arg)
return obj
};
测试
const user = myNew(User,18, '鬼鬼')
说明
每天一到面试题,人人都能冲击
30k+
,点击↓关注【鬼哥】我当前进度【#002题】,如果你能点赞分享、鬼哥骑自行车也是开心的
参考资料
https://boxuegu.com/ask/detail/12985 https://dazhuanlan.com/2020/02/03/5e37df6bd16b8/ https://cnblogs.com/linjunfu/p/10791467.html
评论