这些模式有何不同?

时间:2013-05-14 19:26:18

标签: javascript

这是怎么回事:

var obj = obj || {};

obj.Something = (function() {

    function Something() {

    };

    Something.prototype.someMethod = function() {

    };

    return Something;

})();

与此不同:

obj.Something = function() {

};

obj.Something.prototype = {

};

模式有何不同? 我何时才能使用其中一个?

3 个答案:

答案 0 :(得分:8)

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

例如:

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

此处sum不公开,不会污染全局命名空间。

除此之外,两种模式都非常相似。但是,习惯IIFE pattern是个好主意,特别是当你这样做时,你会试着知道它为什么有用而不仅仅是应用它。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

另外,请注意,在您老师的示例中,某些内容在其原型上有功能。在你的例子中,你用一个空的替换掉了Something的原型。