我需要为 JavaScript 中的嵌套对象创建 getter 和 setter。
目前我在下面的代码中使用Object.defineProperty()
。
针对 ES5 或 ES6。
我愿意
- 您知道一种更简洁的方式(或更好的替代方法)来编写此内容吗?
- 在 getter 和 setter 属性上使用 .bind(base) 的替代解决方案。
var base = {
_name: 'default',
_properties: {
_top: 0
},
constructor: function () {
}
};
Object.defineProperty(base, 'name', {
get: function () {
return this._name;
},
set: function (value) {
this._name = value;
}
});
Object.defineProperty(base, 'properties', {
get: function () {
return this._properties;
},
set: function (value) {
this._properties = value;
}
});
// nesting properties
Object.defineProperty(base.properties, 'top', {
get: function () {
return this._properties._top;
}.bind(base),
set: function (value) {
this._properties._top = value;
console.log('WORKS!');
}.bind(base)
});
console.log(base.name);
base.name = 'Foo';
console.log(base.name);
console.log(base.properties.top);
base.properties.top = 1000;
console.log(base.properties.top);
最佳答案
是这个主意吗?通过 babel 在 jsbin 上测试并运行 es6。
var base = {
_name: 'default',
get name() {
return this._name;
},
set name(n) {
return this._name = n;
},
_properties: {
_top: 0,
get top() {
return this._top;
},
set top(t) {
return this._top = t;
},
},
get properties() {
return this._properties;
},
};
或基于类的版本:
class Base {
constructor() {
this._name = 'default';
this._properties = {
_top: 0,
get top() { return this._top; },
set top(val) { return this._top = val; }
};
}
get name() {
return this._name;
}
set name(n) {
return this._name = n;
}
get properties() {
return this._properties;
}
}
var b = new Base();
关于javascript - ES5或ES6中对象嵌套属性的Getter和Setter的简明定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33914823/