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

时间:2012-03-15 01:54:00

标签: javascript javascript-objects

我正在尝试学习面向对象的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 Developer Console声明

Uncaught ReferenceError: bob is not defined

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

3 个答案:

答案 0 :(得分:6)

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

否则,jsFiddle会将您的代码包装在事件处理程序中,并且可怜的bob会被卡在局部变量中。

Demo

答案 1 :(得分:2)

您错过了}上的结束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()

Here is the updated fiddle.

答案 2 :(得分:0)

当我跑步时你编写了一条

的消息
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/