[英]Use string to access variable in javascript
如果我有:
name.sub = function() {
var sub = {};
var placeholder = "test"
var test = function() {
return 42;
};
// Desired code would be here
return sub;
};
我想使用一個placeholder
來訪問變量,以便得到42
。
像window["name"]["sub"][placeholder]
的東西似乎正在尋找name.sub.test。
我發現的唯一答案是它是否是全局變量。 使用eval可以工作,但我聽說應該盡可能避免使用它。
placeholder = "test";
console.log(eval(placeholder + '()'))
// Would return 42
我的實際最終目標是擁有一個關聯數組,其中:
console.log(array[placeholder]);
// Would return 42
任何幫助,將不勝感激。
這是我最終對感興趣的任何人使用的:
name.sub= function() {
var sub = {};
var placeholder = "test"
var test = function() {
return 42;
var newObj = {};
newObj["test"] = function() {test()}
console.log(newObj[placeholder]())
// Should return 42
};
您不能從所述函數外部訪問函數內部的變量。
相反,您可以這樣做:
name.sub = function(placeholder) {
var functions = {
"test": function() {
return 42;
},
};
return functions[placeholder]();
};
name.sub("test"); // 42
我不確定這是否是您要找的東西,但希望如此。 解釋更多?
您不能以與訪問全局范圍內的window
屬性相同的方式訪問函數內部的局部變量。
kangax寫了一篇有趣的文章[了解JavaScript中的delete] ,其中包括對什么是激活對象的解釋-我認為這是您正在尋找的對象。
我建議您閱讀全文,但長話短說:
在函數內部,聲明的變量(和函數)作為屬性添加到當前范圍的激活對象中,因為它們被添加到全局范圍的window
中。
但是與window
不同:
請注意,激活對象是一種內部機制,程序代碼永遠無法真正訪問它。
結論:您要的(當前)不可能。
您的選擇僅限於:
使用中間對象:
name.sub = function() { var sub = {}; var placeholder = "test"; var array = {}; array.test = function() { return 42; }; console.log(array[placeholder]()); return sub; };
使用eval,完全像您建議的那樣:
name.sub = function() { var sub = {}; var placeholder = "test"; var test = function() { return 42; }; console.log(eval(placeholder + '()')); return sub; };
通過使用window
,通過從test
的聲明中刪除var
:
name.sub = function() { var sub = {}; var placeholder = "test"; test = function() { return 42; }; console.log(window[placeholder]()); return sub; };
我建議使用第一個選項,是因為eval
更好的性能,與window
兼容性(可能與其他代碼沖突),並且僅僅是出於個人喜好和我認為的良好做法。
根據我對您的問題的了解,
似乎您正在尋找JavaScript對象文字的鍵/值對,
保留window.name,順便說一句: https : //developer.mozilla.org/zh-CN/docs/Web/API/Window/name
var sub = {
'test': function() {
return 42;
},
'test2': 42;
}
sub['test']();
sub['test2'];
加上
Using dot notation:
sub.test3 = "value3";
Using square bracket notation:
sub["test4"] = "value4";
也許我在想簡單,但似乎這就是您想要的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.