【问题标题】:How to access attribute of object as a variable?如何将对象的属性作为变量访问?
【发布时间】:2011-04-26 08:54:55
【问题描述】:

我有两个对象:

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

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

在我的 js 代码中,我有:

object=GET_OBJECT();

GET_OBJECT() 方法返回 object1object2,然后,我想访问对象的 name 属性,即 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中,有没有办法将属性作为变量访问?

【问题讨论】:

    标签: javascript javascript-framework


    【解决方案1】:

    试试这样:

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

    【讨论】:

    • 是的,这就是解决方案。谢谢:)
    • @Mellon,不客气。如果它帮助您解决问题,请不要忘记将答案标记为已接受。
    • 是的,我正在等待标记答案,如您所知,我只能在问题创建 10 分钟后标记接受:)
    • 嗨 Darin - 首选访问是什么:Obj.paramObj["param"],为什么?
    • 如果您想使用变量访问“toString”属性会发生什么?在这里介绍的方法中,将返回原型函数。
    【解决方案2】:

    之前很多次我都想知道为什么人们提供解决方案而不是知识。否则提问者会一遍又一遍地重复同样的错误。

    原始代码使用函数来检索属性。假设可以使用参数来调用参数。用更专业的术语来说,点符号被使用,它必须是一个有效的 JavaScript 标识符。点后的名称是内容的指针。因此 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
    

    【讨论】:

      猜你喜欢
      • 2012-07-02
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2021-05-22
      • 2012-06-30
      • 2011-06-10
      • 2012-11-28
      • 1970-01-01
      相关资源
      最近更新 更多