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
のゲッター/セッターを介してのみ変更できるプライベートメンバーになる可能性があるという考えを与えるようですdesc
。これは何らかの形で役に立ちますか?desc
また、使用する値を設定しようとしてcar2.desc = 'Merc'
もうまくいかないようです。どうしてこんなことに?Object.defineProperty と Object.create のどの部分が似ていますか?
リサーチ:
やや関連する質問:構成不可能なプロパティ記述子の [列挙可能性と] 書き込み可能性を設定できるのはなぜですか?
値を削除writable: false
しvalue: 'Porsche boxter'
て設定しようとしましたが、役に立ちませんでした。