簡體   English   中英

使用字符串訪問JavaScript中的變量

[英]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不同:

請注意,激活對象是一種內部機制,程序代碼永遠無法真正訪問它。

結論:您要的(當前)不可能。

您的選擇僅限於:

  1. 使用中間對象:

     name.sub = function() { var sub = {}; var placeholder = "test"; var array = {}; array.test = function() { return 42; }; console.log(array[placeholder]()); return sub; }; 
  2. 使用eval,完全像您建議的那樣:

     name.sub = function() { var sub = {}; var placeholder = "test"; var test = function() { return 42; }; console.log(eval(placeholder + '()')); return sub; }; 
  3. 通過使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM