为什么我对对象方法的javascript调用不起作用

Why is my javascript call to an object method not working?

本文关键字:javascript 调用 不起作用 方法 对象 为什么      更新时间:2023-09-26

我正在尝试学习面向对象的javascript。为什么对对象方法的调用不起作用(没有警报)?

http://jsfiddle.net/hxPqJ/2/

当你点击链接时,应该会出现一个警报,说明Bob的年龄

如果链接消失,这里是HTML:

<a href="#" onclick="bob.say()">eh</a>​

这是我的javascript。

function guy(person_name) {
  this.name = person_name;
  this.age = 32;
  this.say = function() {
    alert(this.name + " is " + this.age);
    return false;
  }
}
  var bob = new guy("Bob");

​Chrome Web开发人员控制台状态

Uncaught ReferenceError: bob is not defined

但是,我认为我用var bob = new guy("Bob");定义了bob

您需要在jsFiddle的左窗格中选择一个no wrap选项。

否则,jsFiddle将您的代码封装在事件处理程序中,而较差的bob则被固定为局部变量。

演示

您缺少say()上的结束}

除此之外,您不能从对象构造函数返回值。这样做将简单地将变量bob设置为false

function Guy(person_name) {
  this.name = person_name;
  this.age = 32;
  this.say = function() {
    alert(this.name + " is " + this.age);};
}
var bob = new Guy("Bob");

还要注意,JavaScript约定通常指示对象构造函数像function Guy() 一样大写

这是最新的小提琴。

当我运行时,您编写了的消息

bob is not defined

显示在控制台上。我认为这是JSFiddle的一个怪癖,因为当我更改内容以在Javascript端而不是在HTML中设置onclick时,事情就成功了。

<a href="#" id="foo">eh</a>
document.getElementById("foo").onclick = function(){ bob.say(); }

http://jsfiddle.net/hxPqJ/6/