1

jQuery でクラスのような構造を実装していますが、一部の関数を呼び出そうとすると問題が発生します。

これは、構造のセットアップ方法です。

MyClass = function(name) {
    this.init(name);
}
$.extend(MyClass.prototype, {
    init: function(theName) {
        this.myFunction(); // works
        $('.myclass').each(function(){
            this.myFunction(); // doesn't work
        });
    },
    myFunction = function(){}
});

私が抱えている問題は、関数の 1 つ (例: myFunction()) を jQuery ブロック (each()上記の構成のように) 内から呼び出そうとすると、エラー " myFunction() is not a function."が表示されることです。

これは、jQuery ブロック内でキーワードの意味が変わることに関係していると思いますがthis、よくわかりません。どんな助けでも大歓迎です!

4

3 に答える 3

4

thisスコープの仕組みのため、別の変数に割り当てる必要があります。

MyClass = function(name) {
    this.init(name);
}
$.extend(MyClass.prototype, {
    init: function(theName) {
        this.myFunction(); // works
        var that = this;
        $('.myclass').each(function(){
                this.myFunction(); // doesn't work
                that.myFunction(); // should work
        });
    },
    myFunction = function(){}
});
于 2009-08-11T18:07:45.387 に答える
0
MyClass = function(name) {
    this.init(name);
}
$.extend(MyClass.prototype, {
    init: function(theName) {
        this.myFunction(); // works
        temp = this;
        $('.myclass').each(function(){
                temp.myFunction(); // works
        });
    },
    myFunction = function(){}
});

それを試してみてください。:)

于 2009-08-11T18:08:07.023 に答える
0

この関数は(JavaScript の他の関数と同様に).each()のコンテキストを変更します。this

次のようなことをする必要があります:

MyClass = function(name) {
    this.init(name);
}
$.extend(MyClass.prototype, {
    init: function(theName) {
        this.myFunction(); // works
        var myClass = this;
        $('.myclass').each(function(){
                myClass.myFunction(); // doesn't work
        });
    },
    myFunction = function(){}
});
于 2009-08-11T18:08:27.600 に答える