【发布时间】:2013-11-03 00:33:38
【问题描述】:
有什么方法可以阻止函数的实例相互继承属性?我正在阅读一篇关于 Javascripts 原型对象的文章并阅读了以下内容。
“需要注意的是原型是“活的”。在JavaScript中对象是通过引用传递的,因此原型不会随着每个新的对象实例复制。这在实践中是什么意思?这意味着你可以修改任何时候的原型和所有对象(即使是在修改之前创建的对象)都将继承更改。”
有没有办法阻止所有对象更新。我想保持每个实例的属性都是唯一的。如果没有,还有其他方法可以将属性分配给函数吗?这是我正在使用的一些代码。它允许我在 three.js 中显示动画精灵,但是当我创建函数的新实例时,实例会跳转到新实例调用的帧。所以那里都显示相同的框架。我想如果我可以关闭继承它应该没问题。抱歉,如果我删除了一堆问题不需要的东西,那么我很草率。
function slowToStopFunc(texture, tilesHoriz, tilesVert, numTiles, tileDispDuration) {
this.tilesHorizontal = tilesHoriz;
this.tilesVertical = tilesVert;
this.numberOfTiles = numTiles;
texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
texture.repeat.set( 1 / this.tilesHorizontal, 1 / this.tilesVertical );
this.tileDisplayDuration = tileDispDuration;
this.currentDisplayTime = 0;
this.currentTile = 3;
this.update3 = function( milliSec3 ) {
this.currentDisplayTime += milliSec3;
while (this.currentDisplayTime > this.tileDisplayDuration && adjustSpeed <= 2)
{
if (this.currentTile >= -1 && this.currentTile <= 14) {
this.currentTile++;
}
}
var currentColumn = this.currentTile % this.tilesHorizontal;
texture.offset.x = currentColumn / this.tilesHorizontal;
var currentRow = Math.floor( this.currentTile / this.tilesHorizontal );
texture.offset.y = currentRow / this.tilesVertical;
}
}
【问题讨论】:
-
可以深度复制一个对象,因此它将是独立的....这是你想要的吗?您尝试实现的样本会有所帮助
-
@charlietfl 是的,对不起,我应该一开始就把它放在那里。你说的很对。
-
所以您是说当您尝试
new slowToStopFunc时它会与其他实例发生反应?那是因为slowToStopFunc是更大对象的一部分吗? -
我不太确定它为什么会做出反应。在阅读了原型继承之后,我发现新实例正在更新旧实例。这就是它的样子。 slowToStopFunc 不是另一个对象的一部分。但我在另一个函数中调用了新的 slowToStopFunc。