2016-07-21 4 views
1

У меня есть этот фрагмент кода:Как я могу получить доступ к контексту экземпляра объекта из предопределенной функции, переданной методу «bind», вызванному в экземпляре?

var test_img = $("<img />"); 
test_img.attr("src", img_url); 
test_img.unbind("load"); 

console.log(test_img); 

test_img.bind("load", function() 
    { 
     console.log(this); 
    }); 

Первые console.log выходы:

[img] 
    0: img // expandable 
    length: 1 
    __proto__: Object[0] // expandable 

Второй console.log выходы:

<img src=​"/​images/​Tree.jpg">​ 

Почему два выхода отличаются?

Кроме того, мне нужно определить функцию, которая передается в test_img.bind в другом месте. Т.е.,

function predefined_function() 
{ 
    console.log(new_this); 
} 

var test_img = $("<img />"); 
test_img.attr("src", img_url); 
test_img.unbind("load"); 

console.log(test_img); 

test_img.bind("load", predefined_function); 

Как я могу сделать так, что new_this такое же, как this в оригинальном фрагменте?

ответ

2

В качестве ответа на ваш первый вопрос разница состоит в том, что конструктор первого выхода - jQuery.fn.init, но конструктор второго выхода - HTMLImageElement. Вы можете получить доступ к изображению с первого выхода, используя test_img[0].
Если вы хотите использовать некоторую предопределенную функцию, просто замените new_this на this.

0

Смотрите этот пример:

https://jsfiddle.net/y89zk2k8/1/

var textDiv = $("<div />").append("click me :)"), 
    func = function() { 
     var $me = $(this); 
    console.log($me); 
    }; 

textDiv.off("click"); 

console.log(textDiv); 

textDiv.on("click", func); 

$("body").append(textDiv); 
  1. Чтобы new_this же, как это: Вы должны изменить его на Jquery роект в функции отклика событие.

  2. Определите функцию, которая передается в событие в другом месте: передайте функцию как параметр функции ответа на событие.

  3. Используйте .on для замены .bind, так как .bind может быть удален из будущих версий в любое время. Нет причин продолжать использовать .bind и все основания предпочитать. Вместо этого.

Смежные вопросы