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

https://img3.mukewang.com/5c68fa4f0001edd806000800.jpg

看到书上这里,想知道为啥用对象字面量的方式会不一样呢?

根据书上的说明,我能理解以 new 的方式调用的基本原理,类似这样:

  • 创建一个对象;

  • 设置原型链,或者叫绑定构造函数原型

  • 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象),执行函数体

  • 判断返回值类型,并返回。如果是值类型,就丢弃它,还是返回instance。
    如果是引用类型,就返回这个引用类型的对象,替换掉 instance。

想知道对象字面量的方式背后的本质,以及两者的真正区别和造成这种情况(为什么会打破原型链)的原因。谢谢(stackoverflow 上同样好多人问,试着看了下,不是很明白)。


慕尼黑8549860
浏览 891回答 1
1回答

宝慕林4294392

自己动手写一遍例子,调断点看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);上述代码运行断点截图如果注释掉赋值自变量的代码 结论就是使用字面量给原型赋值相当于将原型的引用指向另一个对象,那SubType.prototype = new SuperType();自然没有作用了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript