使变量继承现有原型的方法?

时间:2016-03-31 13:22:47

标签: javascript variables inheritance methods

所以,让我说我在地图上有一块瓷砖。

function TileData (image, z) {
    this.image = image;
    this.z = z;
}
var tile = new TileData (tileimage, 0);

现在我可以调用tile.image和tile.z来引用现有数据。

我还有一个名为map的数组,我可以循环绘制地图。

var map = [];

我想要做的是将现有图块的方法附加到数组中的第0个条目,以便在调用函数时绘制它。

所以我尝试做这样的事情。

map[0] = tile;

所以我可以调用map [0] .image来获取在地图上代表该图块的图像。

现在我想更改此图块的图像,所以我尝试这样做。

map[0].image = differentTileImage;

然而Javascript实际上做的是:

tile.image = differentTileImage;

这意味着每当我尝试将该图块用于地图的另一部分时,它将具有不同的值。

map[1] = tile;
//map[1].image will return differentTileImage instead of tileimage.

变量是否有办法继承现有原型的属性和值,而不仅仅是引用它?

(对不起,如果这是一个骗局)。

3 个答案:

答案 0 :(得分:0)

是的,您可以使用Object.assign(),该功能将创建Tile的副本。

map[1] = Object.assign({}, tile);

您可以在以下网址找到更多有用的信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

答案 1 :(得分:0)

问题是JavaScript中的对象总是通过引用传递。更改原始文件时,请更改链中的所有值,使用此引用。

在您的情况下tilemap[0]是相同的想法。如果更改切片map[0]已更改,因为内存中的引用与tile相同。

答案 2 :(得分:0)

  

这意味着每当我尝试将该图块用于地图的另一部分时,它将具有不同的值。

不完全是这样。这意味着当您对地图的每个部分使用单个图块时,它将在任何位置具有完全相同的值。如果您更改此单个图块,整个地图将会更改。

您想要的是创建多个图块实例:

map[0] = new TileData (tileimage, 0);
map[1] = new TileData (tileimage, 0);
…

(你当然会使用循环)

它们仍然会从相同的原型对象(TileData.prototype)继承,但它们是不同的实例,每个图像都可以单独更改。