看到书上这里,想知道为啥用对象字面量的方式会不一样呢?根据书上的说明,我能理解以 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);
上述代码运行断点截图
如果注释掉赋值自变量的代码
结论就是使用字面量给原型赋值相当于将原型的引用指向另一个对象,那SubType.prototype = new SuperType();自然没有作用了。
添加回答
举报
0/150
提交
取消