如何调用同一javascript命名空间中的另一个函数?
我喜欢用名称空间风格组织javascript,如下所示。我想知道的是:有没有另一种(更短的?)方法可以从如何调用同一javascript命名空间中的另一个函数?,javascript,Javascript,我喜欢用名称空间风格组织javascript,如下所示。我想知道的是:有没有另一种(更短的?)方法可以从mySecondFunction()调用myFirstFunction()?我尝试了this.myFirstFunction(),但它不起作用,所以这里可能有某种神秘的技巧,我不知道 var myNameSpace = { myFirstFunction: function(){ alert("Hello World!"); }, mySecondFun
mySecondFunction()调用myFirstFunction()
?我尝试了this.myFirstFunction()
,但它不起作用,所以这里可能有某种神秘的技巧,我不知道
var myNameSpace = {
myFirstFunction: function(){
alert("Hello World!");
},
mySecondFunction: function(){
myNameSpace.myFirstFunction();
}
}
像往常一样感谢你们的帮助,SO的人们!:) 您使用“this”的建议应该有效。i、 e:
var myNameSpace = {
myFirstFunction: function(){
alert("Hello World!");
},
mySecondFunction: function(){
this.myFirstFunction();
}
}
结果:
myNameSpace.mySecondFunction() // "Hello World!".
正如在示例代码中所写,这个.myFirstFunction()
可以工作。您的代码可能会被简化以说明您的问题,因此查看实际代码来说明它为什么不能与this
一起工作可能会有所帮助
它失败的一个可能原因是调用this.myFirstFunction()
的代码在闭包中。如果是这样,此
将是对关闭函数的引用,而不是您的命名空间,因此将失败。请参阅根据您的代码设计的示例,以了解我的意思。同样,查看实际代码可能有助于诊断发生了什么。在某些情况下,这个
关键字应该可以正常工作。如果显式调用myNameSpace.mySecondFunction()
,则this.myFirstFunction()
将按预期执行
如果将myNameSpace.mySecondFunction
用作事件处理程序,则可能不会。对于事件处理程序,您需要某种方式来引用要使用的命名空间。许多JavaScript框架提供了一种定义this
关键字所指内容的方法。例如,在中,您可以执行myNameSpace.mySecondFunction.bind(myNameSpace)
,这将导致this
在mySecondFunction
中引用myNameSpace
。如果不使用框架,可以将事件处理程序设置为匿名函数,如:
document.getElementById('myId').addEventListener('click', function(e) {
myNameSpace.mySecondFunction.call(myNameSpace);
});
有关调用方法的更多信息,我将参考或,您可以使用它,其行为类似于调用,但为第二个参数传递参数数组,而不是为其他参数使用类似varargs的方法
所有这些建议都基于将命名空间定义为:
关于JavaScript函数绑定的更多信息,我强烈建议阅读
< P>如果您希望它更短,也许您应该考虑以下模式: 基本上以您的示例为例:var myNameSpace = (function()
{
function _myFirstFunction(){
alert("Hello World!");
}
function _mySecondFunction(){
_myFirstFunction();
}
return {
MyFirstFunction : _myFirstFunction,
MySecondFunction : _mySecondFunction
};
})();
我发现这是最干净的模式,还提供了javascript中的“private/public”变量,如果您附加到事件:
如果将命名空间的函数附加到事件,则可能会出现问题,如:
$(el).on("click", nameSpace.myFunc);
....
nameSpace = {
myFunc: function(){
this.anotherFunc();
}
}
那会造成错误
解决方案1
您可以使用nameSpace.anotherFunc()
更改this.anotherFunc()
解决方案2
你可能会改变
$(el).on("click", nameSpace.myFunc);
// to ----->
$(el).on("click", function(){ nameSpace.myFunc(); } );
你的例子是正确的,它应该是有效的。很好的简单答案。我完全理解您的JSFIDLE示例。谢谢,你刚刚让我的js代码更干净了一点!你是对的,我简化了我的代码,把它发布在这里,我对函数的调用是在一个闭包中完成的。我不知道这会影响“this”关键字。再次感谢!没问题,加布里埃尔。很高兴这有帮助。:)
$(el).on("click", nameSpace.myFunc);
// to ----->
$(el).on("click", function(){ nameSpace.myFunc(); } );