1

オブジェクト指向を使用してプロジェクトのスクリプト ファイルを作成しており、jQuery や Datatables などのフレームワーク/ウィジェットも使用しています。

クラスで作成したパブリック プロパティは、jQuery コードから実行される関数の内部スコープからはアクセスできません。

以下にサンプルを示します。

    function MyClass() {
        this.MyProperty = '';
    }

    MyClass.prototype.initialize = function() {
            $(document).ready(function(){
            alert(this.MyProperty); // MyProperty is undefined at this point
        }
    };

どうすればこれを修正できますか? これは、クラスのすべてのメンバーからアクセスできるプロパティを持つ正しい方法ですか?

4

4 に答える 4

4

ストアthis

 function MyClass() {
        this.MyProperty = '';
    }

    MyClass.prototype.initialize = function() {
            var that=this;
            $(document).ready(function(){
            // in event handler regardless of jquery this points 
            // on element which fire event. here this === document,
            alert(that.MyProperty); // MyProperty is defined at this point
        }
    };
于 2012-11-04T01:53:41.220 に答える
0

これは、thisがクラスを指しているのではなくdocument、その関数内を指しているためです。それがあなたのクラスを指しているとき、あなたはそれが指しているものを保存する必要があります:

function MyClass() {
    this.MyProperty = '';
}

MyClass.prototype.initialize = function() {
    var myClassInstance=this;
    $(document).ready(function(){
        alert(myClassInstance.MyProperty); // Will contain the property
    });
}
于 2012-11-04T01:55:58.830 に答える
0

$.proxyこれを助けることができます、

function MyClass() {
    this.MyProperty = '';
}

MyClass.prototype.initialize = function() {
    $(document).ready($.proxy(function(){
        alert(this.MyProperty);
    },this));
};
于 2012-11-04T01:59:26.880 に答える
0

これは他のものとは少し異なりますが、操作が少し簡単です。「this」コンテキストを割り当てるロジックを、initialize() 関数自体の外に保持します。あなたのユニークなケースは、このソリューションの実行可能性を無効にする可能性がありますが、とにかく共有したいと思いました.

function MyClass() {
   this.MyProperty = '';
   $(function(){
      this.initialize();
   }.call(this));
}

MyClass.prototype.initialize = function () {
   alert(this.MyProperty);
}
于 2012-11-04T02:14:41.833 に答える