0

目的が何なのか知りたいだけですが、

function MyStream() {
    events.EventEmitter.call(this);
}

Nodejs.org Docsセクションから取得した次のコードブロックでは、

var util = require("util");
var events = require("events");

function MyStream() {
    events.EventEmitter.call(this);
}

util.inherits(MyStream, events.EventEmitter);

MyStream.prototype.write = function(data) {
    this.emit("data", data);
}

var stream = new MyStream();

console.log(stream instanceof events.EventEmitter); // true
console.log(MyStream.super_ === events.EventEmitter); // true

stream.on("data", function(data) {
    console.log('Received data: "' + data + '"');
})
stream.write("It works!"); // Received data: "It works!"

説明してください。

4

1 に答える 1

1

この質問が行われるのはこれが初めてではありません:https ://groups.google.com/forum/#!topic / nodejs / ab_Xih1L5R8 / discussion

ブラッドリーメックからの引用:

オブジェクトでEventEmitter.callを使用すると、EventEmitterのインスタンスメソッド/プロパティ(継承されない)のセットアップが行われます。目的はJavaのsuper(...)またはC#のbase(...)に似ていますが、Javascriptでは暗黙的ではありません。このため、手動で呼び出す必要があります。util.inheritsについての話ですが、これによりMyStream関数が別のプロトタイプ関数から継承され、instanceofが機能するようになります(補足:javascriptでは単一の継承のみが許可されます)。new演算子の動作により、関数内のthis変数がEventEmitterのインスタンスに設定されている場合、EventEmitter.callを呼び出すと、MyStreamオブジェクトでEventEmitterのコンストラクターが呼び出されているかのようにすべてのインテントと目的が検索されます。

于 2012-05-24T14:11:38.740 に答える