3

我在这里尝试一些代码,

var cat={
    col:"Red",
    getCol:function(){
        document.writeln(this.col);
    }
}

function getCol(){
    document.writeln(cat.col);
}

$(function(){ 
    $("#button1").click(cat.getCol);
    $("#button2").click(getCol);
})

但是我得到undefined了button1,button2得到了“红色”。有人能告诉我为什么吗?

如果我把它改成$("#button1").click(cat.getCol());,我得到了我需要的“红色”......

4

2 回答 2

3

首先

$("#button1").click(cat.getCol);

给你,因为这东西运行时没有使用undefined的主体。如果您担心跨浏览器兼容性,我建议您使用这里或其他几个变体。对于将“方法”设置为事件处理程序并确保其保持绑定到封闭对象的问题,有许多已发布的解决方案。cat.getColthiscatFunction.prototype.bindthis

下一个

$("#button2").click(getCol);

工作正常,因为直接getCol使用cat

最后

$("#button1").click(cat.getCol());

大错特错。该表达式cat.getCol()是一个返回的调用undefined。这不是为单击处理程序设置的好值。您刚刚看到 document.write 发生,但不是响应点击。

附录

使用绑定的现场演示

于 2012-12-13T05:51:49.450 回答
1

通常在 JS 中,this指的是函数的所有者。因此,在这两种情况下,当调用该函数时,this都会解析为已单击的(jQuery 对象)元素。在第一种情况下,thisis not 'cat',所以 col 没有定义。因此,它给出了未定义的。在第二种情况下,没有这个,所以 cat.col 解析为 Red。

I think you need to do some reading about JS functions, this, anonymous functions .. http://yehudakatz.com/2011/08/11/understanding-javascript-function-invocation-and-this/ is a good place to start.

This on MDN - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/this

于 2012-12-13T06:09:18.200 回答