2012-08-08 5 views
7

私はJavaScriptを使ってオブジェクト指向のアプローチをとっています。理由は2つあります。 1つは、私が学ぶのを助けるので、2つは、ちょうど私のコードが配布される場合です。'this'をJavaScriptの変数に代入する

私はすでに変数に関数を割り当てており、公開変数にはthisを使用しています。しかし、私はthisを使って問題にぶつかっています。私が "プライベート"機能を使用している場合、thisは異なるスコープを参照しており、thisの下の変数にはアクセスできません。私は私のポイントを説明します。 var c = this

var ClassObject = function() { 
    this.var1 = 'Hello'; 

    var var2 = 786; 

    this.func1 = function() { 
    alert(this.var1); // Alerts Hello 
    alert(var2); // Alerts 786 
    } 

    var func2 = function() { 
    alert(this.var1); // Alerts undefined 
    alert(var2); // Alerts 786 
    } 
} 

私はthis.var1func2のアクセス権を与えることを見つけた唯一の方法

thisに割り当てられた別の変数を作ることでした。これは、この作業についての最善の方法ですか、それとも広く受け入れられるのでしょうか?誰より良いソリューションを提供できますか?

ありがとうございます。

+5

短い答え:はい、これは完全に受け入れられます。私はその目的のために使われた変数 'self'を見てきました:' var self = this; ' –

答えて

8

はい、これは受け入れられている方法です。有効範囲のthis articleまたはthis questionを参照してください。

閉鎖で読むこともできます。

+0

あなたのリンクはとても役に立ちました。ありがとうございました。 –

0

別の変数に設定するなどしない限り、あなたがしたいことはできません。だから、あなたはそれをやる必要はありませんので、すべてを再構成するか、単に変数を使用してください。変数を使用することは容認できると言いたいと思います。

+0

これはすばやく簡単でした。ありがとう、@CaseyとTMP、そして他のみんな。 –

4

thisの値は、プライベート関数を呼び出すときを含め、すべての単一の関数呼び出しでjavascriptインタープリタによって設定されます。ルールは非常に単純です:

  1. object.method()を呼び出す場合は、thisは、メソッド内のオブジェクトに設定されています。
  2. 通常の関数(グローバルかローカルかにかかわらず)をfn()のように呼び出すと、グローバルオブジェクト(ブラウザでは通常window)にthisが設定されます。 .apply()または.call()を使用する場合は、thisは、例えば、あなたがそれはあなたが.apply()または.call()に渡すものによってに設定されているかを制御することができます(これらの関数の最初の引数に設定されている。

したがって、あなたが呼び出すとき

  • プライベート関数は、あなたがオブジェクトのthisにアクセスしたい場合は、オプション2を取得している、あなたはこれらの3つのオプションがあります。

    1. をそれらのプライベート関数のメソッドを(彼らはもはやプライベートになることはありません)作成し、それらを呼び出しますメソッドliとしてke this.func2()ので、JavaScriptのインタープリターはthisを設定します。
    2. または.apply()func2.call(this)とし、通訳者に希望通りにthisを設定するよう指示します。
    3. func1()var self = thisなどと呼び出す前に、thisの値をローカル変数に格納してください。selffunc1()をクロージャで参照することができます。これはjavascriptで非常に一般的に行われています(クロージャが親スコープ変数へのアクセスを許可する方法を利用します)。
  • +0

    私はまだ '.call()'や '.apply()'を調べていませんが、今私はこれを行います。ありがとうございました。 –

    関連する問題