最近私はJavaScriptに深く没頭し、質問に遭遇しました。JavaScriptオブジェクトの3種類の違いは何ですか?
オブジェクトの以下の実装の違いは何ですか:
var myFunction1 = (function myFunction1() {})();
var myFunction2 = {}
var myFunction3 = function myFunction3() {}
それともまったく同じタスクを予備成形する3つの実装の長い例では。
<script>
var myFunction1 = (function myFunction1() {
var _privateVar = 'Private var';
this.publicVar = 'Public var';
function init(newPrivate, newPublic) {
_privateVar = newPrivate;
this.publicVar = newPublic;
}
function getPrivateVar(){
return _privateVar;
}
function setPrivateVar(string){
_privateVar = string;
}
return {
init: init,
getPrivateVar: getPrivateVar,
setPrivateVar: setPrivateVar
}
})();
var myFunction2 = {
_privateVar: 'Private var',
publicVar: 'Public var',
init: function init(newPrivate, newPublic) {
this._privateVar = newPrivate;
this.publicVar = newPublic;
},
getPrivateVar: function getPrivateVar(){
return this._privateVar;
},
setPrivateVar: function setPrivateVar(string){
this._privateVar = string;
}
}
var myFunction3 = function myFunction3() {
var _privateVar = 'Private var';
this.publicVar = 'Public var';
function init(newPrivate, newPublic) {
_privateVar = newPrivate;
this.publicVar = newPublic;
}
function getPrivateVar(){
return _privateVar;
}
function setPrivateVar(string){
_privateVar = string;
}
return {
init: init,
getPrivateVar: getPrivateVar,
setPrivateVar: setPrivateVar
}
}
var a, b, c;
a = myFunction1;
a.init('Private var updated', 'Public var updated');
console.log('== A ==');
console.log(a.publicVar); // Public var updated
console.log(a._privateVar); // undefined
console.log(a.getPrivateVar()); // Private var updated
a.setPrivateVar('Private var is updated again');
console.log(a.getPrivateVar()); // Private var is updated again
b = myFunction2;
b.init('Private var updated', 'Public var updated');
console.log('== B ==');
console.log(b.publicVar); // Public var updated
console.log(b._privateVar); // Private var updated
console.log(b.getPrivateVar()); // Private var updated
b.setPrivateVar('Private var is updated again');
console.log(b.getPrivateVar()); // Private var is updated again
c = new myFunction3();
c.init('Private var updated', 'Public var updated');
console.log('== C ==');
console.log(c.publicVar); // Public var updated
console.log(c._privateVar); // undefined
console.log(c.getPrivateVar()); // Private var updated
c.setPrivateVar('Private var is updated again');
console.log(c.getPrivateVar()); // Private var is updated again
</script>
2つの最初の例はシングルトンで、最後に複数のオブジェクトを作成することができます。しかし、最初の2つの違いは何ですか?または、彼らは同じですか、少し書いただけですか?
最初の例では、 'var myFunction1 =(function myFunction1(){})();'はオブジェクトを与えません。関数の戻り値をmyFunction1に格納します。 – nderscore
@nderscoreはい、myFunction2とまったく同じことをやっていませんか? – jamietelin
いいえ。 myFunction2は関数ではありません。 – SLaks