2

私はC++オブジェクトをラップしてnode::ObjectWrapおり、次のように定義されたいくつかのメソッドがあります:

auto tpl = NanNew<v8::FunctionTemplate>(New);
tpl->SetClassName(NanNew("className"));
tpl->InstanceTemplate()->SetInternalFieldCount(4);

NanSetPrototypeTemplate(tpl, NanNew("method1")  , NanNew<v8::FunctionTemplate>(Method1) , v8::ReadOnly);
NanSetPrototypeTemplate(tpl, NanNew("method2")  , NanNew<v8::FunctionTemplate>(Method2), v8::ReadOnly);
NanSetPrototypeTemplate(tpl, NanNew("method3")  , NanNew<v8::FunctionTemplate>(Method3) , v8::ReadOnly);
NanSetPrototypeTemplate(tpl, NanNew("method4")  , NanNew<v8::FunctionTemplate>(Method4), v8::ReadOnly);

すべてが期待どおりに機能し、次の方法で JS でオブジェクトのインスタンスを作成できます。

var classInstance = new className();

すべてのメソッドは正常に機能しますが、関数をログに記録しようとすると:

console.log(classInstance);

私は次のようなものを見ることを期待しています:

{
    method1 : [Native Function],
    method2 : [Native Function],
    method3 : [Native Function],
    method4 : [Native Function]
}

しかし、私が得るものは次のとおりです。

{}

これらを可視化する(別名列挙可能にする)方法について何か考えはありますか?

4

1 に答える 1

2

あなたが持っているものは本質的に

var tpl = function(){};
tpl.prototype.method1 = function(){};
tpl.prototype.method2 = function(){};
tpl.prototype.method3 = function(){};
tpl.prototype.method4 = function(){};

var inst = new tpl();

console.log(tpl);

問題は、出力されたものにはプロトタイプチェーンの値が含まれていないということです。したがってinst、実際には印刷するプロパティがありません{}inst.__proto__プロパティしかありません。プロパティは列挙可能であるため、表示することはできますが、のプロパティでObject.keys(inst.__proto__);はありません。owninst

于 2014-07-18T17:01:00.120 に答える