繁体   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