0

オブジェクトのデータフィールドにプライベートデータを格納するJQueryプラグインを開発しています(私が見つけた記事で推奨されているように):

$.fn.awesomify = function (schema, data) {
    $(this).data('schema', schema);
}

次に、プライベートメソッドでこの値を取得できます。

function rebuild() {
    var schema = $(this).data('schema');
}

今私が抱えている問題は、メソッドが別のオブジェクトから呼び出されたときに$(this)の値が異なることです。たとえば、hrefのonclickイベント:

var a = ...;
a.click(function () {
    rebuild(); // Now $(this) is the a-object
});

これをどのように解決すればよいですか?

ありがとう!

4

2 に答える 2

2

これは、 の値がthis呼び出し時に決定され、メソッドが属するオブジェクトに設定されるためです。またはwindow、メソッドがオブジェクトにアタッチされていない場合*; rebuild()はオブジェクトに添付されていないため、thisですwindow

thisin の値を引数として渡すか、 Function.prototype.call/Function.prototype.applyメソッドを使用できます。

rebuild.call(this);

また:

rebuild(this);

function rebuild(that) {
    var schema = $(that).data('schema');
}

* -> 例外は、厳密なモードにいる場合ですが、undefinedここでは関係ありません。

于 2012-07-05T12:16:24.170 に答える
0

「この」オブジェクトを変数に保存し、この変数が表示されている場所ならどこからでも使用できます

    var currentObj = $(this);

    function rebuild() {
       var schema = currentObj.data('schema'); 
    } 
于 2012-07-05T12:31:08.170 に答える