我正在开发一个 JQuery 插件,它将私有(private)数据存储在对象的数据字段中(正如我发现的一篇文章中所推荐的那样):
$.fn.awesomify = function (schema, data) {
$(this).data('schema', schema);
}
然后我可以在私有(private)方法中检索该值:
function rebuild() {
var schema = $(this).data('schema');
}
现在我遇到的问题是,当从不同的对象调用该方法时, $(this) 的值是不同的。例如href的onclick事件:
var a = ...;
a.click(function () {
rebuild(); // Now $(this) is the a-object
});
我该如何解决这个问题?
谢谢!
最佳答案
这是因为 this
的值在调用时确定,并设置为该方法所属的对象,或者如果未附加该方法则设置为 window
到一个对象*; rebuild()
未附加到对象,因此 this
是 window
。
您可以将 this
的值作为参数传递,也可以使用 Function.prototype.call
/Function.prototype.apply
方法;
rebuild.call(this);
或者:
rebuild(this);
function rebuild(that) {
var schema = $(that).data('schema');
}
* -> 异常(exception)情况是如果您位于 strict mode ,其中未定义
,但这与此处无关。
关于javascript - Jquery插件私有(private)数据和$(this),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11344119/