1

在 javascript 中,当您将一个对象分配给另一个对象时,您实际上创建了一个引用或别名,两个名称指向同一事物。至少在这种情况下是这样的:

var obja = { val : 0 };
var objb = obja;
objb.val =20;
obja  //Object {val: 20}

但是,在原型继承中,(对象分配)是我们应该创建继承的方式之一。取自面向对象的 Javascript (Stoyan Stefanov):

function Shape(){}
// augment prototype
Shape.prototype.name = 'shape';
Shape.prototype.toString = function() {return this.name;};
function TwoDShape(){}
// take care of inheritance
TwoDShape.prototype = Shape.prototype;
TwoDShape.prototype.constructor = TwoDShape;
// augment prototype
TwoDShape.prototype.name = '2D shape';
function Triangle(side, height) {
this.side = side;
this.height = height;
}
// take care of inheritance
Triangle.prototype = TwoDShape.prototype;
Triangle.prototype.constructor = Triangle;
Triangle.prototype.name = 'Triangle';

问题是 - 为什么这些作业会以它们的方式工作?如果我查看之前的 obja 和 objb 分配,我希望这样:

TwoDShape.prototype = Shape.prototype;

会导致 TwoDShape 和 Shape 具有相同的原型(都引用相同的东西)。然后当 TwoDShape 开始向他的原型添加属性时,我希望它们被添加到 Shape 中,而这显然没有发生。

4

0 回答 0