7
はのは、このコードでfile.jsてみましょう:node.jsのnew演算子ではどのように動作する必要がありますか?
module.exports.func = function(txt) {
this.a = 1;
this.b = 2;
console.log(txt, this);
return this;
}
今、私たちは次の操作を実行し、別のJSファイルを持っている:
意図したとおりにそれが動作R1の場合var r1 = new (require('./file')).func('r1');
var r2 = new require('./file').func('r2');
を - r1はへの参照が含まれています新しく作成されたオブジェクト。
r2の場合は動作しません - r2はfile.jsからmodule.exportsへの参照を取得します。
目的は、func()コンストラクタを呼び出して新しいオブジェクトを作成することでした。 R2はR1と同じように動作しない理由
var r3 = require('./file');
var r4 = new r3.func('r1');
は、しかし、私は理解していない:確かに、私はまた、R1と同じである。この方法でそれを行うことができます。
require( './ file')の前後の余分な括弧はどのように違いますか?
感謝を。コンパイラがnewの右側にある関数を見つけたら、それをコンストラクタとして呼び出すと、新しい演算子を正しく理解できますか?しかし、オブジェクトがある場合(r1の場合、after(require( './ file'))の評価)、それは継続してファイル( 'r1')が関数であるかどうかをチェックし、それをコンストラクタとして呼び出します。私は正しいですか? –
はい、あなたは正しいです。 –
確認していただきありがとうございます。どのように新しいオペレータが解釈されているかについてのこのような情報はどこにも見つかりませんでした。( –