Object.defineProperty()
ベースオブジェクトを活用しようとしているときにハングアップが発生しました。を使用してそのオブジェクトからプロパティを継承Object.create()
し、派生オブジェクト(そこから継承される可能性があります)でさらにプロパティを定義したいと思います。node.jsでこれをターゲットにしていることに注意してください。
次に例を示します。
var Base = {};
Object.defineProperty(Base, 'prop1', {
enumerable:true,
get:function(){ return 'prop1 value';}
});
Object.defineProperty(Base, 'prop2', {
enumerable:true,
value : 'prop 2 value'
});
Object.defineProperty(Base, 'create', {
value:function(){
return Object.create(Base);
}
});
console.log(Base);
var derived = Base.create();
Object.defineProperty(derived, 'prop3', {
enumerable:true,
value:'prop 3 value'
});
console.log(derived);
これは以下を出力します:
{ prop1: [Getter], prop2: 'prop 2 value' }
{ prop3: 'prop 3 value' }
console.log()は、継承されたプロパティprop3
と、派生オブジェクトで定義したプロパティを列挙すると思いました。この方法で定義されたプロパティのプロトタイプ階層は検索されないようです。あれは正しいですか?
オブジェクトのメソッドをオーバーライドすることを検討しましたtoString()
が、console.log()がそれを呼び出さないようです。
- 列挙せずにすべてのプロパティをログに記録するにはどうすればよいですか?
- これは継承を実装するための有効な方法ですか?
編集:
- node.jsのライブラリに、継承されたプロパティをログに記録する別の関数がありますか?