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

Defining getters and setters after the object is instantiated

这段代码来自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 = {} 中形成一个长定义?

您可以使用 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)

Object.defineProperty 就是您要找的:

var o = {};
Object.defineProperty(o, 'a', {
  get: function() { return 1; },
  set: function(val) { console.log(val) }
});