如何访问对象的属性作为变量?

时间:2011-04-26 08:54:56

标签: javascript-events javascript javascript-framework

我有两个对象:

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成为变量,以便我可以通过这种方式访问​​pNamenName

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中,有没有办法将属性作为变量访问?

2 个答案:

答案 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