Javascript Jquery插件私有数据和$(此)
我正在开发一个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
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');
}