这些模式有何不同?

use*_*919 6 javascript

这是怎么回事

var obj = obj || {};

obj.Something = (function() {

    function Something() {

    };

    Something.prototype.someMethod = function() {

    };

    return Something;

})();
Run Code Online (Sandbox Code Playgroud)

与此不同:

obj.Something = function() {

};

obj.Something.prototype = {

};
Run Code Online (Sandbox Code Playgroud)

模式有何不同?我何时会使用一个而不是另一个?

Den*_*ret 8

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

例如 :

obj.Something = (function() {
    var sum = 0;
    function Something() {
    };
    Something.increment = function(){ sum++ };
    Something.getSum = function(){ return sum };    
    return Something;
})();
Run Code Online (Sandbox Code Playgroud)

这里sum不公开,也不污染全局命名空间.

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

  • @ alex23如果在与外部代码相同的级别声明`var sum = 0`,它是一个全局变量.这是非常基本的东西. (2认同)
  • 此外,第一种方法允许在一个步骤中轻松地重命名类,而不必搜索"obj.Something"的每个实例的代码. (2认同)