На мой взгляд, если вы используете this
, вы используете прямую ссылку на объект, тогда как если вы используете my
, интерпретатору потребуется пройти по цепочке контекста, пока он не найдет my
каксвойство window
.
Но могут быть и другие аргументы.
РЕДАКТИРОВАТЬ:
Я должен отметить, что, поскольку this
определяется как как вызывается функция, для этого требуется, чтобы объектом активации был этот объект.
Так что это будет работать:
my.anotherPublicMethod();
Но этоне будет:
var test = my.anotherPublicMethod;
test();
Если это возможно, то вы должны использовать my
или какую-либо другую прямую ссылку на объект.Вы можете уменьшить обход цепочки областей, сохранив ссылку на объект.Ваша переменная myNamespace
должна работать.
Немного не по теме, но я бы также отметил, что ваш код не будет работать так, как он есть.
Эта строка:
return (window.myNamespace = window.my = myNamespace)
... не имеет доступа к переменной myNamespace
.
Возможно, вы имели в виду нечто большее?
(function(window){
window.myNamespace = window.my = (function(){
var myNamespace = {
somePublicMethod: function(){
},
anotherPublicMethod: function(){
}
}
return myNamespace;
}());
})(window);