Javascript 试图更好地理解对象文字模式
在myFeature对象的init函数下面有一行Javascript 试图更好地理解对象文字模式,javascript,jquery,Javascript,Jquery,在myFeature对象的init函数下面有一行$.extend(myFeature.config,config)。我的背景让我想知道为什么这行不是$.extend(this.config,config)?这不是指函数体中的父对象吗 如果不是这样的话,我想如果我理解得足够好,我会使用揭示模块模式,因为我可以做var self=this并在myFeature的整个属性中引用self。我不明白在对象文字模式中,init属性如何访问函数中的myFeature。看起来myFeature是全局范围的,它的
$.extend(myFeature.config,config)
。我的背景让我想知道为什么这行不是$.extend(this.config,config)?这不是指函数体中的父对象吗
如果不是这样的话,我想如果我理解得足够好,我会使用揭示模块模式,因为我可以做var self=this并在myFeature的整个属性中引用self。我不明白在对象文字模式中,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)
?这个
不是指函数体中的父对象吗
是的,因为您正在使用myFeature.init()调用它,所以它可以工作-请参阅。但是,您可以为安全而冲突-通过明确引用myFeature
它也允许
$(document).ready(myFeature.init);
我不明白在对象文字模式中,init属性如何访问函数中的myFeature。看起来myFeature是全局范围的,任何人都可以随时访问它的所有属性和它本身
对。myFeature
变量在全局范围内,甚至可能被完全不同的对象覆盖。重新暴露模块模式将有一个局部作用域self
变量,无法对其进行操纵
我在想,显示模块模式将为我提供私人/公共访问,让我晚上睡得更好
对。如果您更喜欢它,您应该实现它:-)如果您愿意,您可以使用this.config。一个非常好的解释正在等待您,[单击此处][1][1]: