0

こんにちは、次のような JS の関数としてプロパティを設定できるクラスを作成する必要があります。

var myClass = {

    myFunction: null,

    otherFunction : function ()
    {
        myFunction();
    }
}

function initPage()
{
    myClass.myFunction = function() { ... }
}

myFunction を使用したい場合は、次のように記述できます。myClass.otherFunction();

出来ますか?

4

2 に答える 2

1

thisに到達するために使用する必要がありますmyFunction(これは結局のところ、オブジェクトのプロパティです):

otherFunction : function ()
{
    this.myFunction();
}

質問のコードにあるものmyFunctionは、最も近い利用可能なスコープで検索されます。最後に探すのはwindow.myFunction. このままでは、おそらくエラーになります ( myFunction.

繰り返しますが、違いは、myFunctionはスコープ変数を検索するのに対し、this.myFunctionは のプロパティを検索するのthisと同じように(それ自体がスコープ変数である場合)myClass.myFunctionを検索します。myClassmyClass

于 2013-09-19T10:27:25.433 に答える
0

あなたがそれをうまく呼ぶならthis.myFunction()。しかし、利点は何ですか?何を達成しようとしていますか?

myClass をインスタンス化できるものとして定義したい場合は、次のように定義する必要があります。

var myClass = function(){

    myFunction: null;

    someFunction: function(){...};

    otherFunction : function ()
    {
        this.myFunction();
    }
}

次に、通常の JavaScript オブジェクトのようにインスタンス化します。

var myClassInstance = new myClass();

そしてそのメソッドを呼び出します:

myClassInstance.someFunction();

prototypeこのように、新しいメソッドをクラス宣言に動的に追加する場合は、クラスのプロパティを使用できます。これは、クラス定義を動的に変更できるクラス定義への参照です。

myClass.prototype.myFunction = function() { ... };

次に myFunction を直接呼び出します。

myClassInstance.myFunction();

プロトタイプの概念の使用に関する詳細については、次のリソースをご覧ください。

継承とプロトタイプチェーン

于 2013-09-19T10:33:13.297 に答える