如何在对象中定义属性同义词?

时间:2014-07-28 16:17:04

标签: javascript

我在像这样的javascript对象中定义了一个属性

function obj()
{
      this.elems = [1,2,3]
      Object.defineProperty(this, 'length', {
          get: function() { 
              return this.elems.length; 
          }
      });
}

到目前为止,一切正常,我已经定义了一个带有两个参数的函数,一个属性名及其同义词

this.defineSyn = function(property,syn) 
{
      Object.defineProperty(this, syn, function() { 
          return this[property]; 
      });
}

现在在对象定义中我像这样调用defineSyn函数

this.defineSyn('length','len');

但是当我声明一个变量并尝试调用属性len时,我得到了undefined'结果length返回结果3

var o = new obj();
console.log(o.length); // returns 3
console.log(o.len); // returns undefined

1 个答案:

答案 0 :(得分:3)

defineProperty()内的defineSym()来电看起来很糟糕:

Object.defineProperty(this, syn , function() { return this[property]; });

这应该是:

Object.defineProperty(this, syn , { get: function() { return this[property]; } });