2009-07-17 7 views
8

Javascript OOでは、いつthisキーワードを使用しますか?これはいつjavascript OOで使用するのですか?

また、クラスのメソッドを同じクラスの別のメソッドから呼び出す場合は、thisを使用するのか、関数の名前だけを使用するのですか?例:これは正しいですか?この特定の例では

function Foo() 
{ 
    this.bar= function() 
    { 
     alert('bar'); 
    } 

    this.baz= function() 
    { 
    this.bar(); //should I use this.bar() or just bar()? 
    } 
} 
+1

あなただけの'バーを() 'を使用することはできません関数 'this.baz'の' bar'として定義された変数に対して、関数 'Foo'で' bar'として定義された変数を探し、最後にグローバルスコープを調べ、エラーを投げる。 – Blixt

+1

JavaScriptのプロトタイプシステムを学ぶことが重要です。質問するのがよい質問です。しかし、JavaScriptで大規模なOOプログラムを実行しようとすると、Joose.jsまたはJs.Classを使用します。 – Nosredna

+0

なぜこれを下落させたのですか? –

答えて

6

「オブジェクト指向」のJavaScriptについては、こちらのリンク先のマークディキンソンがPrivate Members in JavaScriptにリンクしています。あなたが現在必要としていない他のものについて詳しく説明しますが、JavaScriptがどのように機能するかを理解すれば、普通のオブジェクト指向言語とはかなり異なることがわかります。thisが本当に意味するもの。

(これは機能に新しいインスタンスが作成されるたびに再定義避けることができます。)私はあなたのケースでは、あなたは間違いなくthisを使用する必要があることを言うだろう、多分あなたの機能はあなたの「クラス」のprototype一部にする必要があります

+0

Douglas Crawfordが記事にリンクしているものと非常に似ているようなクラスのためのシンプルなテンプレートを作成しました。(リンクしています)コードを見てみると、いつでも見ることができます:http://blixt.org/js /classes.js(生ファイル)http://blixt.org/js#project/js-classes(構文ハイライト付き) – Blixt

+1

「クラスのプロトタイプ部分」とはどういう意味ですか? –

+1

関数は、 'new'キーワードで関数を呼び出すときに作成されるオブジェクトのプロトタイプとして使用される' prototype'プロパティを持っています。 'Foo.prototype.bar = function(){...};'を設定した場合、 'new Foo()'で作成されたすべてのオブジェクトは 'Foo.prototype.bar'関数を参照する' bar'プロパティを持ちます。 – Blixt

0

、それは関数内の混乱や頭痛を防ぐためにthisの代わりに自己参照変数を使用するのが最善です。

function Foo() 
{ 
    var self = this; 

    this.bar= function() 
    { 
     alert('bar'); 
    } 

    this.baz= function() 
    { 
    self.bar(); 
    } 
} 

JavaScriptですべてのものがオブジェクトであるため、関数内thisキーワードは、親関数を参照しているため、それが理由。特定のスコープで変数を定義することによって、その変数がそのスコープを維持することが保証されます。

+0

理由は何ですか? –

+0

あなたはそうしているので、範囲は明らかです。多くの人が「自己」の代わりに「それ」を使用しています。 – Nosredna

+0

または$ thisを実行できます。 –

0

@ tj111の前の答えを強調して共感するだけで、私はあなたにthisを読むことをお勧めします。関数スコープをよりよく理解する。

0

正しいバージョンは、関数を呼び出すときにエラーを表示しないバージョンです。 thisを省略すると、ReferenceError例外が発生します。

0

JavaScriptの「関数エイリアシング」についての別の記事では、JavaScriptで「これ」がどのように機能するかを例とともに詳細に説明しました。私はそれがあなたにとって有用かもしれないと思う。

確認してください:this`はJavaScriptで決して暗黙的である `ので、(。それは本当に適切なオブジェクト指向言語ではありませんので)`バー() `最初になりJavaScript function aliasing doesn't seem to work

関連する問題