2

我在javascript中有一个人为的例子来解释我想要做什么:

我有一个对象:

var Item = {
  _first = undefined,
  _second = undefined,
  whole = putTogether()
};

function putTogether() {
  if (_first && _second) 
    return _first + '_' + _second;

  return '{ Invalid Values }';
}

我试图能够Item.whole作为财产访问。有没有一种方法可以做到这一点,以便在putTogether每次访问它时进行评估,而不是在创建对象时进行评估?

我知道我可以为 定义一个匿名函数Item.whole,但我特别想构造它,以便它可以作为值而不是函数来引用。

4

2 回答 2

2

这叫做吸气剂。是的,有可能:

var Item = {
  _first: undefined,
  _second: undefined
};
function putTogether() {
  if (this._first && this._second) 
    return this._first + '_' + this._second;
  return '{ Invalid Values }';
}

Object.defineProperty(Item, 'whole', {
    get: putTogether
});
于 2012-11-17T17:28:00.933 回答
1

你可以这样做:

var Item = {
    _first : undefined,
    _second : undefined
};

Object.defineProperty(Item, "whole", {
    get : function(){
        if (this._first && this._second)  return this._first + '_' + this._second;
        return '{ Invalid Values }';
    },
});

console.log(Item.whole); // prints  { Invalid Values }
Item._first = "a";
Item._second = "b";
console.log(Item.whole); // prints a_b 

示范

​defineProperty 的MDN

于 2012-11-17T17:32:05.713 回答