2012-06-15 2 views
2

У меня есть следующий класс в JavaScript:Как предотвратить JQuery перекрыть «это»

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. Там я делаю , который печатает элемент DOM. Мы привязали этот метод к объекту, а не к объекту, который выполняет метод initialize2. Как я могу получить доступ к этому объекту из этой функции? Это похоже на то, что область привязки функции - это все DOM, а не объект. В любом случае, чтобы сделать то, что я пытаюсь сделать?

+3

более девять тысяч дубликатов – Esailija

ответ

10
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 
     }); 
    }; 
2

Пройдите мимо объекта this до .on, а внутри обработчика вы можете использовать event.data для доступа к объекту this. Смотрите ниже,

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 
    }); 
}; 
0

Проходят внешний this через event.data:

$('#edit_vcards').on('click', { outerThis: this }, function (event) { 
    console.log(event.data.outerThis); 
});