2017-01-25 25 views
1

次のように私は、定義されたクラスを持っている:カスタムメイドクラスからメソッドにアクセスするにはどうすればよいですか?

export default class MyClass { 

    myMethod(code){ 
     console.log("The code is" + code) 
    } 
} 

私は私のメインクラスからアクセスできますか?

import MC from './MyClass' 

... 

MC.myMethod("987"); 

私は取得していますエラーは次のとおりです:私は間違って何をやっている

undefined is not a function (evaluating '_MyClass2.default.myMethod("987")' 

メインクラスでは、私は次のコード行を持っていますか?また、_,2defaultは、私のクラス名の次のエラーメッセージの意味は何ですか?

+0

これはJavaScriptかEiffelかsmalltalkか...? :) – BitTickler

+0

@BitTicklerそれはes6のjavascriptクラスです –

答えて

2

これは、インスタンスメソッドを作成したためです.2つのオプションがあります。どちらか、そのクラスのインスタンスを作成します。

var c = new MyClass(); 

c.myMethod(); 

または設定をそのstatic方法として:あなたが宣言する必要が

export myMethod(code) { 
    // ... 
end 
+0

ありがとうございます。これは、クラスのインスタンスを作成する必要がないため、私が使用するサードパーティのモジュール(react-native-fsなど)のほとんどが静的メソッドのアプローチを使用することを意味しますか? – kojow7

+0

従来のJavaScriptオブジェクト( 'class'以外)は呼び出すことのできるメソッドしか持っていません。既に最終フォームになっているため、インスタンス化する必要はありません。 ES6クラスを使用している場合は、静的に宣言する必要があります。実際にクラスのインスタンスを作成するつもりがない場合は、それをコンテナとして使用するだけです。['export'](https://developer.mozilla.org/en-US/docs/Web/)を使用することを検討してくださいJavaScript/Reference/Statements/export)を使用しています。 – tadman

0

static myMethod(code) { 
    // ... 
} 

もう一つの方法は、直接export機能にありますあなたのクラスのオブジェクトは他のプログラミング言語のようにそのメソッドを呼び出す前に。

export class MyClass { 

    public myMethod(code){ 
     console.log("The code is" + code) 
    } 
} 

あなたのインポートからオブジェクトを作成し、JS ES6クラスを宣言する場合

var mc = new MC(); 
mc.myMethod("987"); 
1

メソッドを呼び出し、そのメソッドということを覚えて

import MC from './MyClass' 

を使いたいところはどこでも、それをインポートしますstaticキーワードを使用した場合、メンバーはクラスの各インスタンスにバインドされるか、クラス自体にバインドされます。

012このインスタンス(最初の場合)またはクラス自体(第2形態)に結合するいずれか その語彙コンテキストを起動し、その宣言に依存

また、すべてのインスタンスメソッド(2番目のケースのような)は、クラスのprototypeプロパティの中に入れられるはずです。したがって、あなたは持っている:

class MyClass() { 

    myMethod() {} 

} 

(typeof MyClass.protototype.myMethod === "function") // true 

const o = new MyClass() 

(o.myMethod === MyClass.prototype.myMethod); // true 

静的メソッド(またはクラスメソッド)の場合、メソッドは直接クラスオブジェクトに関連付けられます。

あなたのケースで表示されるエラーは、メソッドがstaticキーワードで宣言されていないために発生しています。

関連する問題