在尝试了解有关 Object.create 的更多信息时,我遇到了Object.create(): the New Way to Create Objects in JavaScript。
上一页的一个例子:
var Car2 = Object.create(null); //this is an empty object, like {}
Car2.prototype = {
getInfo: function() {
return 'A ' + this.color + ' ' + this.desc + '.';
}
};
var car2 = Object.create(Car2.prototype, {
//value properties
color: { writable: true, configurable:true, value: 'red' },
//concrete desc value
rawDesc: { writable: false, configurable:true, value: 'Porsche boxter' },
// data properties (assigned using getters and setters)
desc: {
configurable:true,
get: function () { return this.rawDesc.toUpperCase(); },
set: function (value) { this.rawDesc = value.toLowerCase(); }
}
});
car2.color = 'blue';
alert(car2.getInfo()); //displays 'A blue PORSCHE BOXTER.'
问题:
上面的例子有多正确?
这个答案似乎与上面的例子相矛盾。它似乎给出了一个概念,即rawDesc
可能是一个只能通过 getter/setter of 修改的私有成员desc
。这有什么用吗?此外,尝试设置
desc
使用值car2.desc = 'Merc'
似乎不起作用。为什么呢?Object.defineProperty 和 Object.create 的哪些部分相似?
研究:
有点相关的问题:为什么我可以设置不可配置属性描述符的[可枚举性和]可写性?
我尝试删除writable: false
并value: 'Porsche boxter'
尝试设置该值,但无济于事。