6

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()がそれを呼び出さないようです。

  1. 列挙せずにすべてのプロパティをログに記録するにはどうすればよいですか?
  2. これは継承を実装するための有効な方法ですか?

編集:

  1. node.jsのライブラリに、継承されたプロパティをログに記録する別の関数がありますか?
4

2 に答える 2

5

利用可能な場合console.dir()に使用できます

console.dir(derived) 

オブジェクトの継承されたプロパティがオブジェクトに表示され__proto__ます

編集:ノードに表示されないようですが

于 2012-11-09T01:39:26.263 に答える
1

Firebug、継承されたプロパティをログに記録します。

ここに画像の説明を入力してください

Chromeは、継承されたプロパティを含むツリービューを提供します。

ここに画像の説明を入力してください

于 2012-11-09T01:38:35.837 に答える