如何从传递给" bind"的预定义函数中访问对象实例的上下文?在实例上调用的方法?

时间:2016-07-21 02:02:13

标签: javascript jquery this bind anonymous-function

我有这个片段:

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 个答案:

答案 0 :(得分:2)

作为第一个问题的答案,区别在于第一个输出的构造函数是jQuery.fn.init,但第二个输出的构造函数是HTMLImageElement。您可以使用test_img[0]从第一个输出访问图像 如果您想使用某些预定义功能,只需将new_this替换为this

答案 1 :(得分: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 Oject。

  2. 定义在其他地方传递给事件的函数:将函数作为参数传递给事件响应函数。

  3. 使用.on替换.bind,因为.bind可能会在以后的版本中被删除。没有理由继续使用.bind和所有理由而不是.on。