Javascript:通过onclick调用时,对象中的函数未定义

我在这里尝试一些代码,

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

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

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

但是我为button1定义了未定义,为button2定义了“红色”.有人可以告诉我为什么吗?

如果我将其更改为$(“#button1”).click(cat.getCol());,则会得到我需要的“红色” …

解决方法:

首先

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

给您未定义的信息,因为cat.getCol的主体在运行时不会使用cat.如果您担心跨浏览器的兼容性,我建议您在此处使用Function.prototype.bind或其他几种变体.关于将“方法”设置为事件处理程序并确保其始终与封闭对象绑定的问题,有许多已发布的解决方案.

下一个

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

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

最后

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

是完全错误的.表达式cat.getCol()是一个返回未定义的调用.为点击处理程序设置的值不是一个很好的值.您刚刚看到document.write发生了,但是没有响应单击.

附录

Live demo using bind

相关文章

1.第一步 设置响应头 header('Access-Control-Allow...
$.inArray()方法介绍 $.inArray()函数用于在数组中搜索指定的...
jquery.serializejson.min.js的妙用 关于这个jquery.seriali...
JS 将form表单数据快速转化为object对象(json对象) jaymou...
jQuery插件之jquery.spinner数字智能增减插件 参考地址:http...