2012-03-15 9 views
2

私はオブジェクト指向のJavaScriptを学ぼうとしています。オブジェクトメソッドに対するこの呼び出しが機能しない(アラートなし)のはなぜですか?オブジェクトメソッドへのjavascript呼び出しが機能しないのはなぜですか?

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

リンクをクリックすると、アラートが古いボブがどのように述べて表示されるようになっています。

リンクがこれまでに消える場合は、ここではHTMLです:

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

、ここでは私のjavascriptのです。 Chromeウェブデベロッパーコンソールは

Uncaught ReferenceError: bob is not defined 

を述べ

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"); 

しかし、私は私がvar bob = new guy("Bob");bobを定義したと思います。

答えて

2

}say()にありません。

それ以外では、オブジェクトコンストラクタ関数から値を返さないでください。そうすることで、変数bobfalseに設定するだけです。

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の規則は、一般的に、私はあなたが

bob is not defined 

のメッセージをコーディング実行したときのオブジェクトのコンストラクタは上に示したfunction Guy()

Here is the updated fiddle.

+0

コンストラクタ理にかなっているに戻っていない、ありがとう。 falseを返さずに、クリックイベントがDOMツリーをバブリングするのを防ぐにはどうすればいいですか? – dangerChihuahua007

+1

@DavidFaux: 'return false;'をインラインハンドラに置きます。 – SLaks

+1

@Michae l:DavidのJavascriptは実際には完全に有効ですが、誤ってインデントされています。私の答えを見てください。 – SLaks

0

のように大文字にすることdicatateことコンソール。 JavaScriptの代わりにJavascript側でonclickを設定するように変更したときに、作業がうまくいったので、これはJSFiddleの奇抜なことだと思います。

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

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

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

+1

を参照してくださいこの答えは完全に正しいが、まったく役に立たない。 – SLaks

6

あなたはjsFiddleの左ペインでno wrapのいずれかのオプションを選択する必要があります。

それ以外の場合、jsFiddleはイベントハンドラにコードをラップし、不良なbobがローカル変数としてスタックされます。

Demo

関連する問題