2012-03-15 96 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

相關問題