2012-07-01 8 views
12
var tools = {}; 

tools.triangle = function() { 
    var originX = 0; 
    var originY = 0; 
} 

 Javascriptの関数でvarとthisの違いは?

var tools = {}; 

tools.triangle = function() { 
    this.originX = 0; 
    this.originY = 0; 
} 

これら2つのコードブロック間の違いはありますか?申し訳ありませんがこれまでに尋ねられている場合。

+1

'var'変数はprivateです。 'this'変数はpublicです。 – elclanrs

+1

@ elclanrs - 誤解を招くので、そのコメントは役に立たない。変数はグローバルとして宣言することができ、 'this'は実行コンテキストに関連しています。通常の意味では変数ではありませんが、ローカル変数と考えることができます。 – RobG

答えて

11

varは、tools.triangleにローカル変数を作成します。変数originXoriginYは、tools.triangleの外部と対話できません。 thisは、あなたが扱っている現在のオブジェクトへのポインタです。 2番目の例は、new tools.triangle();を実行してオブジェクトにプロパティを与えるために使用できます。 newを使用せず、tools.triangle();を使用する場合、thisは、グローバルオブジェクト(windowオブジェクト)を指します。あなたはこのような関数法call();apply();を使用してthisポイントするオブジェクトを変更することができます。

var myObj = {}; 

tools.triangle.call(myObj); 

// "this" in tools.triangle now points to myObj 
// myObj now has the properties originX and originY 

thisは、任意のオブジェクトを参照することができるだけでなく、ES5 strictモードで未定義またはnullすることを知っておくことが重要です。

詳細はhereです。

+0

答えに感謝しています。 –

+0

'これは説明より多くの説明が必要です。これは呼び出しによって設定され、**任意の**オブジェクトを参照することができます。また、ES5 strictモードでは未定義または' null'になります。 – RobG

+0

@ 0x499602D2お返事ありがとうございます。私は本当にこれを探していた。私はまた 'call'(および' apply')メソッドがスコープを変更する可能性があるという事実を知らなかった。 – GuyT

0

最初の例では、XとYの両方が、変数triangleに保存されたクロージャのローカル変数として存在します。

第2の例では、XとYは、thisを使用しているため、オブジェクトtools.triangleの変数として存在します。

関連する問題