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 に答える