jam*_*lin 6 javascript javascript-objects
我最近一直深入研究JavaScript并偶然发现了一个问题.
以下对象的实现有什么区别:
var myFunction1 = (function myFunction1() {})();
var myFunction2 = {}
var myFunction3 = function myFunction3() {}
Run Code Online (Sandbox Code Playgroud)
或者使用三个实现的较长示例来执行完全相同的任务.
<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>
Run Code Online (Sandbox Code Playgroud)
我知道前两个例子是单例,最后一个允许我创建多个对象.但前两个有什么区别?或者它们是一样的,只是写得有点不同?
第一个示例创建一个函数myFunction1()并执行它,将结果(不是函数)存储在变量myFunction1\xe2\x80\x94 中,在这种情况下,名称首先 myFunction1包含一个函数,然后(一旦执行)它包含结果。
myFunction2根本不是一个函数。括号{}是一个对象字面量,创建一个空对象。
myFunction3是示例中唯一的函数。在这种情况下它什么也不做。
| 归档时间: |
|
| 查看次数: |
1272 次 |
| 最近记录: |