6

这是如何做到的:

var obj = obj || {};

obj.Something = (function() {

    function Something() {

    };

    Something.prototype.someMethod = function() {

    };

    return Something;

})();

与此不同:

obj.Something = function() {

};

obj.Something.prototype = {

};

模式有何不同?我什么时候会使用其中一个?

4

3 回答 3

8

您使用老师推荐的方式的主要原因是您可以定义不会在全局范围内公开的其他变量和函数。

例如 :

obj.Something = (function() {
    var sum = 0;
    function Something() {
    };
    Something.increment = function(){ sum++ };
    Something.getSum = function(){ return sum };    
    return Something;
})();

这里sum不是公共的,也不会污染全局命名空间。

除此之外,这两种模式非常相似。但习惯IIFE 模式是个好主意,尤其是当您尝试了解它为什么有用而不只是应用它时。

于 2013-05-14T19:29:40.347 回答
1

我认为他更多地采用 OOP 方法进行建模。他的语法类似于一个类定义,根据他的话,这可能会使它更“可用”

于 2013-05-14T19:28:50.550 回答
1

在他的例子中,他几乎做了一个关闭。你应该读一下。如果它在自调用函数的上下文中有任何变量,那么你就会有一个闭包。

另外,请注意,在您老师的示例中,某些东西的原型上有一个功能。在您的示例中,您通过将Something 的原型替换为空的原型来删除它。

于 2013-05-14T19:30:31.463 回答