Javascript 无法使用命名空间、模块化、专用的选择器作为目标
我试图通过在脚本中使用名称空间并使函数私有化来定位jquery选择器Javascript 无法使用命名空间、模块化、专用的选择器作为目标,javascript,jquery,Javascript,Jquery,我试图通过在脚本中使用名称空间并使函数私有化来定位jquery选择器,但我认为我仍然缺少一些东西,有人可以指导吗。如果我尝试在最后一行添加一个断点,然后使用devtools访问MyUtility.Selectors.ColorCss.myBorder() 选择器 首先 第二 第三 var customModule=(函数(){ var MyUtility={ 选择器:{ ColorCss:function(){ var myBorder=函数(){ $('li').css('color',
选择器
首先
正如您所说的
如果我尝试在最后一行添加断点,然后使用devtools访问MyUtility.Selectors.ColorCss.myBorder()
这是您的代码:
var customModule = (function () {
var MyUtility = {
Selectors: {
ColorCss: function(){
var myBorder = function(){
$('li').css('color', 'red');
console.log('hello');
}
return{ myBorder: myBorder }
}()
} // Selectors
} // MyUtility
}())
上面的代码可以写成:
function myBorderFunc() { $('li').css('color', 'red'); console.log('hello');}
var selectorObj = { ColorCss : function(){ return{ myBorder: myBorderFunc } }()};
var MyUtility = { Selectors: selectorObj};
var customModule = ( function(){ MyUtility }() );
这说明了问题所在
var customModule
是一个不返回任何内容的函数表达式,因此它是未定义的
customModule
未定义,因此不能使用customModule.MyUtilityMyUtility.Selectors.ColorCss.myBorder()
,因为MyUtility
是一个具有属性Selectors
的对象// undefined since nothing is returned
var bar = (function(){ {Foo: "i am foo"} }());
// returns foo and can be used bar.Foo ---> "i am foo"
var bar = (function(){ return {Foo: "i am foo"} }());
要“修复您的代码”,请返回MyUtility
var customModule = (function () {
var MyUtility = {
Selectors: {
ColorCss: function(){
var myBorder = function(){
$('li').css('color', 'red');
console.log('hello');
}
return{ myBorder: myBorder }
}()
} // Selectors
} // MyUtility
return MyUtility;
}())
这样,您可以像这样访问它customModule.Selectors.ColorCss.myBorder()
更多关于的信息,只是试图理解名称空间、私有等的概念-但它不应该工作吗?javascript中没有私有或公共方法,只有作用域。@adeneo:即使Crockford将它们称为私有,它们实际上也不是,只是变量超出了范围。@Purefan-你读过我的想法:)太好了:)非常感谢=>返回MyUtility=>customModule.Selectors.ColorCss.myBorder()
var customModule = (function () {
var MyUtility = {
Selectors: {
ColorCss: function(){
var myBorder = function(){
$('li').css('color', 'red');
console.log('hello');
}
return{ myBorder: myBorder }
}()
} // Selectors
} // MyUtility
return MyUtility;
}())