在实例化对象后定义 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) }
});
这段代码来自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) }
});