2015-11-10 2 views
1

Вот пример класса псевдо в IIFEВ JavaScript, в чем преимущество обертывания псевдо-класса в IIFE?

// cow.js 
(function(exports) { 
    "use strict"; 

    function Cow(name) { 
    this.name = name || "Anon cow"; 
    } 
    exports.Cow = Cow; 

    Cow.prototype = { 
    greets: function(target) { 
     if (!target) 
     throw new Error("missing target"); 
     return this.name + " greets " + target; 
    } 
    }; 
})(this); 

Что такое преимущество, что в течение следующих:

"use strict"; 

    function Cow(name) { 
    this.name = name || "Anon cow"; 
    } 
    exports.Cow = Cow; 

    Cow.prototype = { 
    greets: function(target) { 
     if (!target) 
     throw new Error("missing target"); 
     return this.name + " greets " + target; 
    } 
    }; 

Не оба эти в конечном итоге добавив корова «конструктор 'функция глобального масштаба?

Файл cow.js включается через HTML-документ в тег скрипта. Это означает, что значение this - это окно. Разве это не тот самый глобальный масштаб, который оба примера будут использовать для добавления функции?

Может ли кто-нибудь предоставить пример использования этого в модуле или в разных областях?

Это не дубликат, как IFFE в следующем связанный с этим вопрос не принимает параметр - What is the purpose of wrapping whole Javascript files in anonymous functions like “(function(){ … })()”?

код был скопирован здесь: https://nicolas.perriault.net/code/2013/testing-frontend-javascript-code-using-mocha-chai-and-sinon/

+1

.P.r.i.v.a.c.y. – Tushar

+1

@ Tushar Вы могли бы объяснить это более подробно? – Daryn

+0

Во втором примере Cow становится глобальным методом (предполагается, что он определяется в области окна, поэтому он становится window.Cow), хотя это не в первом примере. –

ответ

0

Разница в том, объем - в 1-й case все определено в области анонимной функции, во втором случае в глобальной области. Преимущество IIFE - это инкапсуляция модулей, вы можете определить функцию/класс с тем же именем в каждом модуле, не затрагивая другой.

+0

Я добавил более подробно к вопросу о том, что этот скрипт включен через HTML-страницу. Разве это не означает, что обе версии добавляют «Корова» в область окна? – Daryn

Смежные вопросы