2016-05-23 34 views
0

node.jsでまだ把握していない私はクラスがメインのjsファイルで定義されている場合は、クラスの外に存在する関数をクラス内から呼び出すことができます。node.jsの必須クラスから外部関数を呼び出す

function b(){ 
    console.log('b'); 
} 
class X{ 
    a(){ 
     b(); 
    } 
} 

var c = new X(); 
c.a(); 

以上が正常に動作しますが、私はrequireを使用して、クラス独自のファイルを作成する場合、それは関数が定義されていないと言われます。

メインファイル:

var X = require('./X.js'); 
function b(){ 
    console.log('b'); 
} 
var c = new X(); 
c.a(); 

X.js:

class X{ 
    a(){ 
     b(); 
    } 
} 
module.exports = X; 

なぜこれがある、と私はそれを回避する方法を得るのですか?それとも、クラス内から外部関数を呼び出すのが貧弱なのですか?

+0

を印刷する必要があります'b'はクラス' X'でアクセス可能なスコープ内に定義されていないため、動作しません。モジュールには独自のスコープがあります。 –

+0

モジュールは独自のスコープを持っているので、モジュールから何かを取得する唯一の方法は、 'module.exports'に割り当てることです。 'X.js'が別のクラス' Y'を持っていても、最後に 'module.exports = X;'が残っていれば、メインファイルは 'Y'を参照することができません - ' X .js'はそれを参照できます。 –

答えて

0

説明されたファイルの外にあるクラスにアクセスする場合は、module.exportsまたはそのバリエーションの1つを使用してエクスポートする必要があります。例:

ファイルa.js:

function testClass(){ 
    console.log("Test class accessed on file a.js"); 
} 
module.exports.testClass = testClass; 

ファイルb.js:

a = require('./a.js'); // check path to a.js 

a.testClass(); 

EDIT: ただ、リマインダー、node b.js実行し、それはそれはdoesnのTest class accessed on file a.js

+0

これを実行した場合、関数を2回書く必要があります。メインサーバーで1回、クラスで1回。 – Jonah

+0

@ANONクラスを別のファイルから呼び出すと思っていたので、クラスをファイルに宣言して別のクラスから呼び出す必要がありました。何か不足していますか? – Ernanirst

+0

いいえ、必要なクラスからグローバル関数を呼び出したいと思います。したがって、私のメインサーバには 'b'という関数があり、必要なクラスの1つでは' b'への呼び出しがありますが、それは要求されたクラスのスコープ内にないためエラーです。 – Jonah

関連する問題