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

您可以将“this”对象存储到某个变量中,然后在该变量可见的任何地方使用它

    var currentObj = $(this);

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