スプライトの位置を別のオブジェクト内にカプセル化したかったのです。そのため、とを使用する代わりに、tile.x
とを介してtile.y
アクセスします。tile.position.x
tile.position.y
しかしtile.position
、initメソッド内での値を設定すると、タイルオブジェクトのすべてのインスタンスが同じ値に変更されます。何故ですか?
私が設定したときと同じようにtile.x
、すべてが期待どおりに機能します。つまり、各オブジェクトが正しい値を取得します。
これが私が複数のインスタンスを作成する方法です:
forループで、上記のオブジェクトの複数のインスタンスを作成しています。
for (var y = 0; y < 10; ++y) {
for (var x = 0; x < 10; ++x) {
var tile = Object.create(tileProperty);
tile.init(x, y);
...
}
}
そして、これは複製されたオブジェクトです:
var tileProperty = {
// this works
x: null,
y: null,
// this will get changed for ALL instances
position: {
x: null,
y: null
},
init: function(x, y) {
this.name = x.toString() + y.toString();
this.x = x;
this.y = y;
this.position.x = x;
this.position.y = y;
this.canvas = document.createElement('canvas');
var that = this;
$(this.canvas).bind('click', function() {
console.log(that.position, that.x, that.y);
});
document.body.appendChild(this.canvas);
}
}