javascript - Jquery插件私有(private)数据和$(this)

标签 javascript jquery jquery-plugins

我正在开发一个 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() 未附加到对象,因此 thiswindow

您可以将 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/

相关文章:

javascript - jquery 圈子进度 |更改圆圈进度的颜色

javascript - 你如何在javascript中将纪元转换为可读的日期格式

javascript 设置 header Access-Control-Allow-Origin

jquery 插件多实例不起作用

如果从打开状态单击标签,jQuery 日期选择器将保持打开状态

javascript - lightSlider 销毁并重建只需运行一次

javascript - 将字符串转换为 JSON 对象

javascript - WebStorm 未正确显示语法突出显示

jquery - 如何在选择下拉列表中隐藏所选选项

javascript - 如何通过ajax调用调用JS函数