在javascript中,有什么区别:
var singleton = function(){ ... }
和
var singleton = new function(){ ... }
按照crockford(http://www.crockford.com/javascript/private.html)的描述声明特权函数只能使用后者。
答案 0 :(得分:5)
区别主要在于您的第二个示例中,您将函数表达式用作Constructor,new
运算符将导致函数自动执行,this
该函数内的值将引用新创建的对象。
如果您没有从该函数返回任何内容(或者您没有返回非原始值),则会返回this
值并将其分配给您的singleton
变量。
特权方法也可用于您的第二个示例,常见模式使用immediately invoked function expression,创建closure,其中私有成员可访问,然后您可以返回包含公共API 的对象,例如:
var singleton = (function () {
var privateVar = 1;
function privateMethod () {/*...*/}
return { // public API
publicMethod: function () {
// private members are available here
}
};
})();
答案 1 :(得分:0)
我认为crockford描述的特权函数看起来像这样:
function Test() {
this.privileged = function() {
alert('apple');
}
function anonymous() {
alert('hello');
}
anonymous();
}
t = new Test; // hello
t.privileged(); // apple
// unlike the anonymous function, the privileged function can be accessed and
// modified after its declaration
t.privileged = function() {
alert('orange');
}
t.privileged(); // orange