var testObj = {
値: 10,
追加: function(inc){
this.value = (typeof inc === "number") ? inc : 1;
}
};
testObj.add();
testObj.value; // 11
testObj.add(2);
testObj.value; // 13
var testObj = (function(){
var value = 10;
return {
add: function(inc){
value = (typeof inc === "number") inc : 1;
},
getValue: function (){
戻り値;
testObj.add();
testObj.getValue(); // 11
testObj.add(2);
testObj.getValue(); // 13
通常、関数を呼び出して testObj の値をオブジェクトに返します。変数はここで定義されており、add メソッドと getValue メソッドで常に使用できますが、関数のスコープにより他のプログラムからは見えなくなります。同時に、内部関数のライフサイクルが外部関数よりも長いという結論も引き出すことができます。
コンストラクター呼び出しの例を続けて見てみましょう。
MyObj.prototype.getStatus = function(){
return this.status;
};
var obj = new MyObj("javascript");
obj.getStatus(); // "javascript"
これを書くことに問題はありませんが、少し「不要」になります。 「なぜですか? 直接アクセスできるプロパティに getStatus メソッドを使用してアクセスするのはどうですか?もちろん、それが意味をなすのは、地位が私有財産である場合に限られます。
return status;
}
};
};
var myObj = obj("javascript");
myObj.getStatus(); // "javascript"
ここで obj を呼び出すと、 getStatus メソッドを含む新しいオブジェクトが返されます。オブジェクトへの参照は myObj に保存されます。obj が返された場合でも、getStatus メソッドは引き続き obj オブジェクトの status 属性にアクセスする特権を享受します。 getStatus メソッドはパラメータのコピーにはアクセスせず、パラメータ自体にアクセスします。これが可能になるのは、関数が作成されたコンテキスト (クロージャと呼ばれる) にアクセスできるためです。