2012-03-15 63 views
2

我想学习面向对象的JavaScript。为什么这个调用对象方法不起作用(没有提示)?为什么我的JavaScript调用对象方法不工作?

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

当你点击链接,警报是应该出现,说明鲍勃有多老。

在情况下,链接永远消失了,这里是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网上应用的开发者控制台指出

Uncaught ReferenceError: bob is not defined 

不过,我觉得我有var bob = new guy("Bob");定义bob

回答

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的约定通常dicatate一个对象构造函数中资本像function Guy()

Here is the updated fiddle.

+0

谢谢,没有在构造函数中返回是有道理的。但是,如果不返回false,我该如何防止点击事件冒泡DOM树? – dangerChihuahua007 2012-03-15 02:00:23

+1

@DavidFaux:将'return false;'放入内联处理程序中。 – SLaks 2012-03-15 02:01:38

+1

@Michae l:David的Javascript实际上是完全有效的,但是是错误的。看到我的答案。 – SLaks 2012-03-15 02:02:09

0

当我跑到你的代码

bob is not defined 

消息即显示在安慰。我认为这是一个JSFiddle怪癖,因为当我改变了在Javascript端设置onclick而不是在HTML中时,事情就起作用了。

<a href="#" id="foo">eh</a> 

document.getElementById("foo").onclick = function(){ bob.say(); } 

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

+1

这个答案是完全正确的,但完全没有帮助。 – SLaks 2012-03-15 02:03:29

6

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

否则,jsFiddle将您的代码包装在事件处理程序中,而差的bob作为局部变量卡住。

Demo

相关问题