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

问题描述 投票:6回答:2

我有两个对象:

object1={
   type: 'obj1',
   nName: 'nName'
}

object2={
   type: 'obj2',
   pName: 'pName'
}

在我的js代码中,我有:

object=GET_OBJECT();

GET_OBJECT()方法返回object1object2,然后,我想访问对象的name属性,即nNamepName

我有一个方法将获取返回对象的名称(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中,有什么方法可以将属性作为变量访问?

javascript javascript-framework
2个回答
9
投票

尝试这样:

function getName(Object, name) {
    return Object[name];
}

0
投票

我想知道为什么人们提供解决方案而不是知识。否则,提问者将一遍又一遍地重复同样的错误。

原始代码使用一个函数来检索属性。假定可以使用参数来调用参数。用更专业的术语来说,正在使用点符号,该符号必须是有效的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
© www.soinside.com 2019 - 2024. All rights reserved.