在实例化对象后定义getter和setter

时间:2016-05-23 19:29:08

标签: javascript javascript-objects getter

这段代码来自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

有没有办法可以打破getter和setter,以便在o = {}内不是一个长定义?

2 个答案:

答案 0 :(得分:3)

Object.defineProperty是您正在寻找的:

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

答案 1 :(得分:1)

您可以使用Object.defineProperty()

实现此目的
def sumtree(L):
    tot = 0
    for x in L:  # For each item at this level
        if not isinstance(x,list):
            tot += x  # Add numbers directly
        else:
            tot += sumtree(x)  # Recur for sublists
    return tot

见下面的演示:

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