簡體   English   中英

如何使用變量訪問javascript對象的函數屬性

[英]How to access the function property of a javascript object using variable

嗨考慮下面的代碼

 let test={
    a:function(){
      console.log('Hi')
    }
  }

有沒有辦法使用變量調用屬性“a”?

這有效,

 let test={
    a:function(tmp){
      console.log(tmp)
    }
  }
let functn='a';  
test[functn]("hello");

但無論如何都可以像下面的代碼一樣調用:

 let test={
    a:function(){
      console.log('Hi')
    }
  }
let functn='a("hello")';  
test.function;

實際用例:

這是量角器系統測試相關問題,

我有一個帶有 css 定位器 [id=1] 的父對象,子元素具有定位器 [id=1]>div 、 [id=1]>span 等。

所以當前父元素存儲為

let parent = element(by.css('[id=1']) , 

孩子作為

let child1= element(by.css('[div]') 

所以要找到父元素的所有子元素,函數是:

element(by.css('[id=1']).element(by.css('[div]')

因此,我不想再次編寫定位器,而是希望實現:

parent.child1

這有效,

是的,它確實。 去做。

但無論如何都可以像下面的代碼一樣調用:

不。

let functn=a("hello"); 調用變量a的函數並將其返回值functn

假設沒有失敗(因為a沒有聲明),那么test.function查看存儲在test的對象上名為function的屬性的值(它與你剛剛聲明的變量function無關)並執行什么都沒有。

能夠使它工作,我正在將所有內容轉換為字符串並使用 eval 函數調用它:

 let test={ a:function(tmp){ document.write(tmp) } } let functn='a("hello")'; eval(Object.keys({test})[0]+'.'+functn)

有更簡單的代碼形式

 // Using Function Arrow let test = (message => 'Hello World!')() console.log(test) // Using factory function let data = function() { return { nome:'Jack' } } console.log(data()) console.log(Object.values(data()))

如果您正在尋找柯里化解決方案:

 let test={ a:function(str){ return () => console.log(str) } } let functn=test.a("hello"); functn();

首先,如果您不接受任何參數,則傳遞一個不必要的字符串。 你可以做的是使用getter

文檔: https : //developer.mozilla.org/de/docs/Web/JavaScript/Reference/Functions/get

let test={
   get a (){
     console.log('Hi')
   }
}

因此,每次您嘗試訪問a 時,它都會被執行,因此會在您的控制台中打印您“嗨”。

test.a;

您可以通過獲取一組鍵和參數以及一個獲取鍵和參數並調用對象函數的函數,將您的方法更改為不使用eval的方法。

 let call = ([key, parameter]) => test[key](parameter), test = { a: function(tmp) { console.log(tmp); } }, parameters = ['a', 'hello']; call(parameters);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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