Javascript Jquery插件私有数据和$(此)

Javascript Jquery插件私有数据和$(此),javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我正在开发一个JQuery插件,它将私有数据存储在对象的数据字段中(正如我在一篇文章中所推荐的): 然后,我可以在私有方法中检索此值: function rebuild() { var schema = $(this).data('schema'); } 现在的问题是,当从不同的对象调用该方法时,$(this)的值是不同的。例如,href的onclick事件: var a = ...; a.click(function () { rebuild(); // Now $(this

我正在开发一个JQuery插件,它将私有数据存储在对象的数据字段中(正如我在一篇文章中所推荐的):

然后,我可以在私有方法中检索此值:

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
的值作为参数传入,也可以使用/methods

或:

*->例外情况是,如果您在中,其
未定义,但这与此处无关。

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

    var currentObj = $(this);

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

因此,我应该重写调用:'var t=$(this);a、 单击(函数(){rebuild(t);});'不是很漂亮,但应该有用。谢谢(任何替代解决方案仍然非常受欢迎)@SaphuA that或
a.click($.proxy(function(){rebuild(this);},this))
function.bind也可以将方法附加到对象。但是第二个
this
不只是a-object吗?@SaphuA:事实上,我误解了你的问题,认为这正是你想要的。一般的解决方案是将
this
的值存储在变量中,然后在调用时将其传递给
rebuild
。谢谢。然而,这种方法的问题在于它不利于插件。@SaphuA我同意你的看法。也许你可以把它保存在插件对象属性的某个地方,我希望
rebuild()
中的
$(this)
成为创建插件的对象/上下文。
rebuild.call(this);
rebuild(this);

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

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