Модули Javascript
У меня есть следующий код. Это модуль JavaScript.
(function() {
// Object
var Cahootsy;
Cahootsy = {
hello: function () {
alert('test');
},
};
(Cahootsy.scope = (function() {
return this;
})()).Cahootsy = Cahootsy;
return Cahootsy;
}).call(this);
Я не понимаю раздел:
(Cahootsy.scope = (function() {
return this;
})()).Cahootsy = Cahootsy;
Я думаю, что он создает объект, ссылающийся на модуль 'this', а затем присваивает переменную Cahootsy глобальной переменной Cahootsy. Я не понимаю, почему 'this' необходимо назначить Cahootsy.scope
Ответы
Ответ 1
Вы можете немного сломать его, например:
var getScope = function() {return this;}
Cahootsy.scope = getScope();
getScope().Cahootsy = Cahootsy;
Что он делает, это глобальная область (обычно window
, но не всегда). Затем он создает ссылку из Cahootsy
в глобальную область видимости с помощью свойства object scope
, а другой - через свойство scope Cahoosty
.
В результате вы получите window.Cahootsy
объект, а window.Cahootsy.scope
вернется в окно.
Ответ 2
(function() { return this; })()
- это трюк, возвращающий глобальный объект.
Этот оператор устанавливает Cahootsy.scope
глобальному объекту (для использования в будущем), а также устанавливает свойство Cahootsy
объекта globalobject для отображения Cahootsy
во внешний мир.