即使我使用命名空间,函数名也是混合的。在下面的示例中,当我致电nwFunc.callMe()
或$.Test1.callTest()
时,它将执行_testFunction()
的{{1}}。我希望doOneThing
在$.Test1.callTest()
API中调用_testFunction()
而不是$.Test1
中的doOneThing
。我需要做些什么来纠正它?
示例:
var doOneThing = function() {
_testFunction= function() {
...
}
return {
// public
callMe: function(){
_testFunction();
}
}
}
var nwFunc = doOneThing();
nwFunc.callMe();
$.Test1.callTest();
下面的jQuery.Test1 = (function(){
_testFunction= function() {
...// do differently
}
return {
// public
callTest: function(){
_testFunction()
}
}
}(jQuery))
答案 0 :(得分:5)
您不在对象文字中,而是在函数体中。
_testFunction: function() { .... // do differently }
不是一个对象属性,而是一个以label开头的匿名函数表达式,因为它没有被分配到任何地方而被遗忘。改为简单的函数声明:
function _testFunction() {
.... // do differently
}
和
return { // public callMe() { _testFunction(); } }
只是一个语法错误,在这里你需要object literal sytnax:
return {
// public
callTest: function() {
_testFunction()
}
};
或
return {
// public
callTest: _testFunction // exporting the function directly
};
当我致电
nwFunc.callMe()
或$.Test1.callTest()
时,它会执行_testFunction()
的{{1}}。我需要做些什么来纠正它?
您必须使用var
declaration将doOneThing
变量放在本地范围内。目前您正在写入全球范围,其中只有一个_testFunction
存在(目前_testFunction
您正在覆盖doOneThing
_testFunction
,jQuery.Test1
callTest
函数将调用新函数)。函数声明也会修复此问题(使用本地范围)is similar to a var statement + function expression。
答案 1 :(得分:3)
您正在混淆语法。在最初声明函数并在实际创建对象时使用函数声明表示法时,您正在使用对象文字表示法,因此您应该切换两个:
jQuery.Test1 = (function(){
function _testFunction() {
.... // do differently
}
return {
// public
callTest: _testFunction
}
}(jQuery))