我在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
定义一个匿名函数,但我特意尝试构造它,以便它可以作为值而不是函数引用。
答案 0 :(得分: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
});
答案 1 :(得分: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