Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript原型分配_Javascript - Fatal编程技术网

Javascript原型分配

Javascript原型分配,javascript,Javascript,在javascript中,当您将一个对象分配给另一个对象时,实际上创建了一个引用或别名,两个名称指向同一个对象。至少在这种情况下是这样的: var obja = { val : 0 }; var objb = obja; objb.val =20; obja //Object {val: 20} 然而,在原型继承中,对象赋值是我们创建继承的方法之一。摘自面向对象Javascript Stoyan Stefanov: function Shape(){} // augment prototyp

在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中,而这显然没有发生。

Shape.prototype.name=='2D Shape'在最后一行之前,它们怎么不添加呢?TwoDShape.prototype=Shape.prototype;这真的在书里吗?你说得对。它使它们具有相同的prototype对象,因此添加到TwoDShape.prototype的内容也会添加到Shape.prototype,这意味着从形状构造函数创建的对象将继承TwoDShape内容。不好。是的,从书上看。非常混乱。需要重新阅读所有内容可能我遗漏了一些内容。@Givi你能举个例子吗?要么这本书错了,要么这是一个不应该做的例子。