我有两个对象:
object1={
type: 'obj1',
nName: 'nName'
}
object2={
type: 'obj2',
pName: 'pName'
}
在我的js代码中,我有:
object=GET_OBJECT();
GET_OBJECT()
方法返回 object1 或 object2 ,然后,我想访问对象的名称属性,即 nName 或 pName 。
我有一个方法可以获取返回对象的名称(pName或nName):
function getName(Object, name){
return object.name;
}
我希望name
成为变量,以便我可以通过这种方式访问pName
或nName
:
object=GET_OBJECT();
var name='';
if(object.type=='obj1')
name='nName';
else
name='pName';
var finalName=getName(object, name);
但似乎它不起作用,因为:
function getName(Object, name){
return object.name;
}
name
是一个变量。 在JS中,有没有办法将属性作为变量访问?
答案 0 :(得分:9)
试试这样:
function getName(Object, name) {
return Object[name];
}
答案 1 :(得分:0)
在我想知道为什么人们提供解决方案而不是知识之前很多次。否则,提问者会一遍又一遍地重复同样的错误。
原始代码使用函数来检索属性。假设可以使用该参数来调用参数。更具技术性的是,使用Dot符号,它必须是有效的JavaScript标识符。点后面的Tha是指针的内容。因此getName始终访问可能未定义的属性名称。
显示的解决方案使用括号表示法,其中使用参数的内容(可能不存在)作为标识符然后,它解析内容,这就是它实际工作的原因。
点符号更快更容易阅读,如果两者都是有效选项,我们会建议使用。当您需要在运行时解析时,将使用括号表示法。这就是在内部定义setter和getter时会发生的情况。下面的代码将使用传递的字符串来确保(使用括号表示法),每当您使用点符号标识符时,将调用传递的函数。
function myClass(){
//setX and getX should be also defined previous to this
this.__defineSetter__("x",this.setX);
this.__defineGetter__("x",this.getX);
//Object.defineProperty can also be used
};
var tObject = new myClass();
tObject.x = 10; //Getter being called