インスタンス化できるクラスが必要で、プライベートおよびパブリック変数/メソッドを保持します。
ここで、プロトタイプの実装が正しいことを確認したいだけです。
前: (jsFiddle: http://jsfiddle.net/7UqSv/1/ )
var MyObject = (function ()
{
var oid = "'oid123'";
var x = 1;
var y = 1;
incrementx = function()
{
x = x +1;
console.log('value of x: ' + x);
}
incrementxagain = function()
{
x = x +1;
console.log('value of x: ' + x);
}
return {
oid : oid,
incrementx: function (){ incrementx(); },
incrementxagain: function (){ incrementxagain(); }
}
});
var NewMyObject = new MyObject();
NewMyObject.incrementx(); //outputs "value of x: 2"
NewMyObject.incrementxagain(); //outputs "value of x: 3"
console.log('oid ' + NewMyObject.oid); //outputs "oid 'oid123'"
後: (jsFiddle: http://jsfiddle.net/7UqSv/6/ )
var MyObject = (function ()
{
var oid = "'oid123'";
this.x = 1;
var y = 1;
//*** ADDED REFERENCE TO THIS USING $this
var $this = this;
//*** MOVED 'incrementx' FUNCTION TO PROTOTYPE BELOW
incrementxagain = function()
{
$this.x = $this.x +1;
console.log('value of x: ' + $this.x);
}
return {
oid : oid,
incrementx: function (){ $this.incrementx(); },
incrementxagain: function (){ incrementxagain(); }
}
});
//****** ADDED PROTOTYPE METHOD
MyObject.prototype.incrementx = function() {
this.x = this.x + 1;
console.log('value of x:' + this.x);
}
var NewMyObject = new MyObject();
NewMyObject.incrementx(); //outputs "value of x: 2"
NewMyObject.incrementxagain(); //outputs "value of x: 3"
console.log('oid ' + NewMyObject.oid); //outputs "oid 'oid123'"
どちらも機能しますが、変数で var を this に変更し、オブジェクトの作成時に $this に this への参照を格納する必要があるのは奇妙だと思いましたか? また、私のコードには多くの変数があるため、「これ」への追加の参照が必要になったため、より多くのコードを書かなければならないということですか? すなわち:
これ:
結果 = (x + y + z) * (x + y + z);
になります:
this.result = (this.x + this.y + this.z) * (this.x + this.y + this.z);
私がここでやっていることはアニットパターンか何かではないというサニティチェックですか?
ありがとう