我有以下JavaScript代码:
function parentFunc() {
function childFunc() {
...
}
...
}
// outside of myParentFunc, how do I call myChildFunc() ?
childFunc(); // doesn't work
如何从childFunc()
以外的地方拨打parentFunc()
?
更新:
我知道明显的答案是将childFun
移到parentFun
之外,但这是我无法修改的第三方库。
答案 0 :(得分:3)
请参阅exposing inner functions外部世界。
答案 1 :(得分:2)
这是你可以做到的一种方式。
var myChildFunction;
function myParentFunc() {
//....
myChildFunction = function () {
//....
}
myChildFunction();
}
myChildFunction();
这是另一种方式
var myChildFunction = function () {
//....
}
function myParentFunc() {
//....
myChildFunction();
}
myChildFunction();
答案 2 :(得分:2)
您可能需要考虑使用Yahoo Module Pattern代替:
myModule = function () {
//"private" variables:
var myPrivateVar = "I can be accessed only from within myModule."
//"private" methods:
var myPrivateMethod = function () {
console.log("I can be accessed only from within myModule");
}
return {
myPublicProperty: "I'm accessible as myModule.myPublicProperty."
myPublicMethod: function () {
console.log("I'm accessible as myModule.myPublicMethod.");
//Within myModule, I can access "private" vars and methods:
console.log(myPrivateVar);
console.log(myPrivateMethod());
}
};
}();
您定义的私人会员定义了myPrivateVar
和myPrivateMethod
,以及定义myPublicProperty
和myPublicMethod
的公开会员。
您可以按如下方式访问公共方法和属性:
myModule.myPublicMethod(); // Works
myModule.myPublicProperty; // Works
myModule.myPrivateMethod(); // Doesn't work - private
myModule.myPrivateVar; // Doesn't work - private
答案 3 :(得分:2)
如果绝对无法修改代码,则无法执行此操作。否则,通过更改行
将内部函数指定给您可以访问的内容function childFunc() {
,比方说,
window.cf = childFunc() {
然后您可以通过cf
变量访问该函数。 (还有很多其他方法可以做到这一点;这是需要对第三方代码进行最少更改的方法。)
答案 4 :(得分:1)
有一种方法可以非常简单地完成这项工作,但这也是一种非常糟糕的做法。但是,因为OCCATIONALLY全局变量很方便,所以我会提到这一点。请注意,在您描述的情况下,这不是使用全局变量的好例子。
以下代码可以使用,但可怕代码。
function parentFunction() {
...
childFunction = function() {
...
}
}
childFunction();
你正在使childFunction全局化,这通常是一个可怕的想法。使用命名空间是一种绕过全局变量精神错乱的方法。
ABV = {};
ABV.childFunction = function() {
...
}
ABV.parentFunction = function() {
...
ABV.childFunction();
...
}
ABV.childFunction();
这就是像DWR这样的库的工作方式。他们使用1个全局变量并将所有子项放在一个全局变量中。
考虑范围如何在JavaScript中工作非常重要。如果你开始抛出全局变量,你一定会遇到很多麻烦。从您使用的示例中可以清楚地看到,您需要一类可以从任何地方调用的“函数”。希望有所帮助。
答案 5 :(得分:0)
只需在函数o_O
好吧,如果库没有提供方法,请修改它并使用.js上传它,可能是库不允许你这样做,因为你不应该这样做。
答案 6 :(得分:0)
以下是您可以做的事情:
将内部函数附加到global:
function parentFunc() {
window.childFunc = function(){
}
}
虽然这是一种贫民窟:)
所以我会使用一些更复杂的OO模式,例如模块模式:
function parentFunc() {
var someVar;
var childFunc = function(){
};
return {
childFunc,
someVar
}
}
parentFunc.childFunc();
这样您就可以返回内部函数和返回值。
请记住,您不能调用内部函数的事实是JS的一个特性而不是限制。
答案 7 :(得分:-1)
function parentFunc() {
var childFunc = function() {
...
}
...
}
childFunc(); // works