構造体を関数のプロトタイプに関連付けてから、その関数で複数のオブジェクトをインスタンス化すると、それらはすべて構造体の同じインスタンスを共有します。オブジェクトがインスタンス化されるときに新しいインスタンスを明示的に作成する必要なしに、各オブジェクトに構造の独自のインスタンスを持たせたいです。それは可能ですか?
これが私がやろうとしていることの要約された例です:
function defineClass(constructor, instanceMembers) {
constructor.prototype.model = instanceMembers.model;
return constructor;
}
var visualObject = defineClass(function () { }, {
model: {
setPosition: function (x, y) {
this.x = x;
this.y = y;
}
}
});
var testA = new visualObject();
var testB = new visualObject();
testA.model.setPosition(10, 10);
console.log(testB.model.x); // outputs "1", but want it to be undefined
testA.modelとtestB.modelはどちらも同じエンティティを参照しているため、これは機能しません。
代わりに、構築時に構造を複製すると機能しますが、その複製操作を避けたいと思っています。このコードは機能しますが、私を傷つけます:
function defineClass(instanceMembers) {
var constructor = function () {
// Create a copy of the model member in this object instance
this.model = $.extend(true, {}, this.model);
};
constructor.prototype.model = instanceMembers.model;
return constructor;
}
var visualObject = defineClass({
model: {
setPosition: function (x, y) {
this.x = x;
this.y = y;
}
}
});
var testA = new visualObject();
var testB = new visualObject();
testA.model.setPosition(10, 10);
console.log(testB.model.x); // is undefined, as expected
javascriptは、インスタンス化のコピーを必要とせずにこれを行う方法を提供しますか?