0
var n = {
     a: 1,
     b: function() {
          return Math.random();
     }
}

我如何以更简单的方式获取对象n中任何方法或变量的值?
现在我的解决方案是:

get = 'b';
typeof n[get] === 'function' ? n[get]() : n[get]; //returns a random number

get = 'a';
typeof n[get] === 'function' ? n[get]() : n[get]; //returns 1

是否需要检查类型以获取nanb的值?这些都不够自己:

n[get] // fails to retrieve return value of n.b
n[get]() //throws an error retrieving value of n.a
4

2 回答 2

2

如果您使用不同的方式定义对象Object.create(),则可以为特定属性指定 setter 和 getter:

o = Object.create(Object.prototype, {
  a: { value: 1 },
  b: {
    configurable: false,
    get: function() { return Math.random(); }
}});

console.log( o.a );  // just 1
console.log( o.b );  // random value
于 2013-11-13T16:10:02.110 回答
0

根据Mozilla的“获取”页面,精炼Sirko的答案后最简单的答案是:

var o = {
  a: 1,
  get b() {
    return Math.random();
  }
}

console.log( o.a );  // returns 1
console.log( o.b );  // random value

这消除了使用 Object.create 的需要。

于 2013-12-02T21:46:36.980 回答