为了账号安全,请及时绑定邮箱和手机立即绑定

JS中用对象字面量的方式(相对 new 实例化)重写某对象的原型,为什么会切断原型链?

JS中用对象字面量的方式(相对 new 实例化)重写某对象的原型,为什么会切断原型链?

慕尼黑8549860 2019-02-13 14:22:57
看到书上这里,想知道为啥用对象字面量的方式会不一样呢?根据书上的说明,我能理解以 new 的方式调用的基本原理,类似这样:创建一个对象;设置原型链,或者叫绑定构造函数原型将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象),执行函数体判断返回值类型,并返回。如果是值类型,就丢弃它,还是返回instance。如果是引用类型,就返回这个引用类型的对象,替换掉 instance。想知道对象字面量的方式背后的本质,以及两者的真正区别和造成这种情况(为什么会打破原型链)的原因。谢谢(stackoverflow 上同样好多人问,试着看了下,不是很明白)。
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

自己动手写一遍例子,调断点看instance实例的原型。


function SuperType() {

    this.a = true;

}


SuperType.prototype.getValue = function () {

    return this.a;

}


function SubType() {

    this.b = false;

}


SubType.prototype = new SuperType();

//原型赋值对象字面量

SubType.prototype = {

    getSuberValue: function () {

        return this.b;

    }

}


var instance = new SubType();

console.log(instance);

上述代码运行断点截图

https://img1.sycdn.imooc.com//5c68fa6f0001fb1f04180115.jpg

如果注释掉赋值自变量的代码 

https://img1.sycdn.imooc.com//5c68fa710001d5db04120116.jpg

结论就是使用字面量给原型赋值相当于将原型的引用指向另一个对象,那SubType.prototype = new SuperType();自然没有作用了。

查看完整回答
反对 回复 2019-02-17
  • 1 回答
  • 0 关注
  • 890 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号