如何防止jquery覆盖“this”
我在javascript中有以下类:
function User(aJid){ this.jid = aJid; this.name = ''; this.uni = ''; this.edad = ''; this.foto = ''; this.avatar = ''; this.initialize2 = function(){ $('#edit_vcards').on('click', '#enviar_vcard', function(){ //alert("enviando..."); console.log(this); }); };
正如您所看到的,我有一个方法“initialize2”,它将函数绑定到DOM中的某些元素。 在那里我做一个console.log(this)
,它打印我们绑定方法的DOM元素,而不是执行方法initialize2
的对象。 如何从该function访问该对象? 它就像绑定的函数的范围是整个DOM而不是对象。 无论如何要做我想做的事情?
function User(aJid){ this.jid = aJid; this.name = ''; this.uni = ''; this.edad = ''; this.foto = ''; this.avatar = ''; this.initialize2 = function(){ var that = this; //store a reference to maintain scope $('#edit_vcards').on('click', '#enviar_vcard', function(){ //alert("enviando..."); console.log(that); //use that variable here }); };
尝试将obj传递给.on
和处理程序内部,您可以使用event.data来访问obj。 见下文,
this.initialize2 = function(){ $('#edit_vcards').on('click', '#enviar_vcard', {obj_this: this }, function(){ //alert("enviando..."); console.log(event.data.obj_this); //should be the obj this }); };
通过event.data
传递外部:
$('#edit_vcards').on('click', { outerThis: this }, function (event) { console.log(event.data.outerThis); });
如今使用ES6它可以更加优雅
$('#edit_vcards').click( () => { //alert("enviando..."); console.log(this); // all your variables are availabled here });
或者甚至喜欢(如果你只需要一行):
$('#edit_vcards').click( () => console.log(this) );
注意:此代码不能直接使用,例如,应使用balel进行额外编译。