В функции init объекта myFeature ниже находится строка $.extend(myFeature.config, config)
. Мой фон заставляет меня задаться вопросом, почему строка не $.extend(this.config, config)? Разве это не относится к родительскому объекту в теле функции?
Если это не так, я думаю, что хотел бы использовать раскрывающийся шаблон модуля, если я его хорошо понимаю, потому что я могу сделать var self = this; и ссылайтесь на себя во всех свойствах myFeature. Я не понимаю, как в шаблоне объектного литерала свойство init имеет доступ к функции myFeature внутри этой функции. Похоже, что myFeature во всем мире охвачена, и все его свойства и сам по себе могут быть доступны любому пользователю в любое время, я знаю, что это характер JavaScript, и я немного понимаю, но я думаю, что раскрывающий модульный шаблон даст мне доступ к частным/общедоступным, что делает я лучше спал ночью.
var myFeature = {
config : {
wrapper : '#myFeature',
container : 'div',
urlBase : 'foo.php?item='
},
init : function(config) {
$.extend(myFeature.config, config);
$(myFeature.config.wrapper).find('li').
each(function() {
myFeature.getContent($(this));
}).
click(function() {
myFeature.showContent($(this));
});
},
buildUrl : function($li) {
return myFeature.config.urlBase + $li.attr('id');
},
getContent : function($li) {
$li.append(myFeature.config.container);
var url = myFeature.buildUrl($li);
$li.find(myFeature.config.container).load(url);
},
showContent : function($li) {
$li.find('div').show();
myFeature.hideContent($li.siblings());
},
hideContent : function($elements) {
$elements.find('div').hide();
}
};
$(document).ready(function() { myFeature.init(); });
Интересно, почему
$.extend(myFeature.config, config)
не$.extend(this.config,config)
? Развеthis
не относится к родительскому объекту в теле функции?
Да, поскольку вы вызываете его с помощью myFeature.init()
это сработает - посмотрите, как this
работает. Однако вы можете бороться за безопасность - явным образом myFeature
на myFeature
это также позволит
$(document).ready(myFeature.init);
Я не понимаю, как в шаблоне объектного литерала свойство init имеет доступ к функции myFeature внутри этой функции. Кажется, myFeature во всем мире охвачена, и все его свойства и сам по себе могут быть доступны любому пользователю в любое время.
Да. Переменная myFeature
находится в глобальной области видимости и может быть даже перезаписана совершенно другим объектом. У шаблона модуля повторной обработки будет переменная self
scope, которая не может быть обработана.
Я думаю, что раскрывающий модульный шаблон даст мне доступ к частному/общественному досугу, который заставляет меня спать лучше ночью
Да. Если вам это нравится, вы должны его реализовать :-)