我有困難調用另一個函數的內部函數時,它的名字是在一個變量的一個函數裏的JavaScript調用函數遠沒有成功。搜索現有的答案沒有任何東西。它與this[x]()
一起使用,如果b()
直接放置在對象內部。我想保留b()
作爲function a()
中的函數,因爲function a()
中的變量範圍,否則我需要將許多參數傳遞給b()
。通過變量名
//// 重複的問題:Quentin在這個線程提供了一個更優雅的答案imo。
我有困難調用另一個函數的內部函數時,它的名字是在一個變量的一個函數裏的JavaScript調用函數遠沒有成功。搜索現有的答案沒有任何東西。它與this[x]()
一起使用,如果b()
直接放置在對象內部。我想保留b()
作爲function a()
中的函數,因爲function a()
中的變量範圍,否則我需要將許多參數傳遞給b()
。通過變量名
//// 重複的問題:Quentin在這個線程提供了一個更優雅的答案imo。
使用匹配變量名稱的字符串訪問任意變量沒有明智的方法。 (對於非常差的方式,請參閱eval
)。
[x]();
//不起作用
你試圖調用數組作爲函數
既不
this[x]()
功能是不是inner
對象的屬性。
window[x]()
等
由於它不是一個全球性的,它不是窗口對象的屬性任一。
如果您需要根據字符串變量的值調用函數,然後在對象中組織函數並從中訪問它們。
function b() {
alert('got it!');
}
var myFunctions = {
b: b
};
x = 'b';
myFunctions[x]();
var myFunctions = { b:b }; 這樣做! – Gonki
的函數聲明b
將在指定爲a
的匿名函數表達式的閉合被捕獲。
var
在閉合時,沒有(提供的JavaScript)對象其被分配類似於用在全球範圍window
發生的屬性。var
s 名稱的函數。如果你真的想通過字符串訪問一個變量(即b
),你要麼需要創建一個對象持有b
類似於你做了什麼爲a
,或(和可能危險地)依靠eval
將"b"
轉換爲b
。
如果您不能創建整個對象名列前茅的時候,你可以使用這種格式
/* in (higher?) scope */
var fnRef = {};
// now when you
function b() {/* define as desired */}
// also keep a ref.
fnRef['b'] = b;
// fnRef['b']() will work **after this line**
假設你的代碼是這樣的:
//instead of x = 'b'
x = function(){}
那麼你解決方案可能是這樣的:
var obj = {}
obj.f = function() {
var inner = {
a: function() {
function b() {
alert('got it!');
}
b(); // WORKS AS EXPECTED
//you can define it as a variable
var x = function(){};
//and call it like this
x();
//or define it like this
this[x] = function(){};
//and call it like this
this[x]();
//but you are creating an array [x] which is not a function
//and you are trying to call an array????
[x](); // DOESN'T WORK, NEITHER this[x]() window[x](), etc.
}
}
inner.a();
}
obj.f();
問題是你的signment
使用x = b
而不是x = 'b'
來指定函數對象,因爲後者只是將字符串賦值給x。
一旦你解決你的任務,你可以調用功能
x();
a.x();
a[x]();
等
您必須將'a [x]()'更改爲'a [「x」]();',除非x是一個帶有「x」值的字符串變量。 –
您應該陣列功能,然後在你的變量使用的名稱如下訪問:
var obj = {}
obj.f = function() {
var inner = {
a: function() {
// set up the possible functions:
var myFuncs = {
b: function b() {alert('got it!');}
};
//b(); // WORKS AS EXPECTED --> commented this code
x = 'b';
myFuncs[x]();
}
}
inner.a();
}
@Gonki您需要對此解決方案的代碼進行最小程度的更改 –
嘗試'window [x] .apply(this,[param1,param2])'[apply](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/申請) – Catalin
@RaraituL'b'將是s應付,所以你不能這樣做 –
@PaulS。 'x'的定義方式,它將在'window'對象 – Catalin