我正在创建一个对象定义来封装几个属性。我对这个对象有 4 个要求:
- 任何时候都可以创建多个实例
- 只能设置/获取对象上定义的属性
- 该对象必须是可字符串化的(只是属性和关联值)
- 字符串化版本必须是可解析的并返回对象
这是我到目前为止的简化版本:
function Car() {
var _make;
Object.defineProperty(this, 'make', {
get: function() {
return _make;
},
set: function(make) {
_make = make;
}
});
Object.preventExtensions(this);
}
我不确定这是否是使用 getter 和 setter 定义对象的最简单方法。有没有使用的替代方法Object.defineProperty
,或者这是新规范?
这种方法还需要我编写自己的stringify
方法(见下文),因为调用JSON.stringify
将剥离函数,而这将剥离make
. 有没有写我自己的替代方法?我可以以某种方式更改我的对象定义吗?
Car.prototype.stringify = function () {
return JSON.stringify({ make: this.make});
}
此外,我必须提供一个可选的构造函数 arg 才能Car
从 JSON 对象实例化 a:
function Car(car) {
var _make;
if(car !== undefined && car != null) {
_make = car.make;
}
...
}
同样,这是满足所有要求的最佳方法吗?