new操作符具体都干了什么?一次笔试题遇到的

举报
孙叫兽 发表于 2021/03/30 06:10:42 2021/03/30
【摘要】 背景:一个笔试题简答谈到new操作符都干了什么?连续两次遇到,总结一下,不然不会的还是不会 new 共经过了4个阶段:1.创建一个空对象 let obj = new Object(); 2.链接到原型 把 obj 的proto 指向构造函数Func的原型对象 prototype,此时便建立了 obj 对象的原型链: obj->Func.prototype-...

背景:一个笔试题简答谈到new操作符都干了什么?连续两次遇到,总结一下,不然不会的还是不会

new 共经过了4个阶段:
1.创建一个空对象

let obj = new Object();

 

2.链接到原型

把 obj 的proto 指向构造函数Func的原型对象 prototype,此时便建立了 obj 对象的原型链:
obj->Func.prototype->Object.prototype->null
代码为:

obj.__proto__ = Func.prototype;

 

3.绑定this值(让Func中的this指向obj,并执行Func的函数体。)

let result = Func.call(obj);

 

4.返回新对象
(判断Func的返回值类型:
如果无返回值 或者 返回一个非对象值,则将 obj 作为新对象返回;否则会将 result 作为新对象返回。)


  
  1. if (typeof(result) == "object"){
  2. func=result;
  3. }
  4. else{
  5. func=obj;
  6. }



 

 

文章来源: sunmenglei.blog.csdn.net,作者:孙叫兽,版权归原作者所有,如需转载,请联系作者。

原文链接:sunmenglei.blog.csdn.net/article/details/109766573

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。