在javascript中,有什么区别:
var singleton = function(){ ... }
Run Code Online (Sandbox Code Playgroud)
和
var singleton = new function(){ ... }
Run Code Online (Sandbox Code Playgroud)
?
声明crockford(http://www.crockford.com/javascript/private.html)所描述的特权功能仅适用于后者.
不同之处主要在于您的第二个示例中,您使用函数表达式作为构造函数,new运算符将使函数自动执行,并且该this函数内的值将引用新创建的对象.
如果您没有从该函数返回任何内容(或者您没有返回非原始值),则this返回该值并将其分配给您的singleton变量.
特权方法也可以在你的第二个例子中,一个常见的模式是使用一个立即调用的函数表达式,建立一个封闭,其中私有成员都可以访问,那么你就可以返回包含你的对象的公共API,例如:
var singleton = (function () {
var privateVar = 1;
function privateMethod () {/*...*/}
return { // public API
publicMethod: function () {
// private members are available here
}
};
})();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
909 次 |
| 最近记录: |