2016-05-23 5 views
2

をインスタンス化された後、コードのこのビットは、MDNから来ている:定義ゲッターとセッターオブジェクトが

var o = { 
 
    a: 7, 
 
    get b() { 
 
    return this.a + 1; 
 
    }, 
 
    set c(x) { 
 
    this.a = x/2 
 
    } 
 
}; 
 
$('body').append(o.a + '<br>') 
 
$('body').append(o.b + '<br>') 
 
o.c = 50; 
 
$('body').append(o.a + '<br>')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

私がやりたい何でもさらにそれを打破です。私は好きなようにこれまでのライン3のように得ている:

var o = {} 
o.a = 7 
o.get b() { // broken 

は、それがo = {}内側に一つの長い定義はないように、私はゲッターとセッターを破ることができる方法はありますか?

答えて

1

あなたはObject.defineProperty()を使用してこれを達成することができます

Object.defineProperty(o, "b", { 
    get: function() { 
    // return something 
    } 
}) 

下記参照デモ:

var o = {}; 
 
o.a = 1; 
 
Object.defineProperty(o, "b", { 
 
    get: function() { 
 
    return this.a + 1; 
 
    } 
 
}); 
 
console.log(o.b)

3

Object.definePropertyあなたが探しているものです:

var o = {}; 
Object.defineProperty(o, 'a', { 
    get: function() { return 1; }, 
    set: function(val) { console.log(val) } 
}); 
関連する問題