new的实现原理【冲击30K专栏02】

共 1420字,需浏览 3分钟

 ·

2021-05-26 22:00

最近刚好换了工作,把最近面试被面的问题,以及现在大多数出现的面试题以一个专题的形式一次性总结,一天一题,现在总共汇总了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(arguments1)
    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
浏览 36
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐