私が持っている場合:
var obj={
a:function(){obj.b();},
b:function(){this.a();}
};
メソッドと同じスコープにあるため、「this」を使用してオブジェクトメソッドを呼び出すか、オブジェクト自体を直接参照することに違いはありますか?
私が持っている場合:
var obj={
a:function(){obj.b();},
b:function(){this.a();}
};
メソッドと同じスコープにあるため、「this」を使用してオブジェクトメソッドを呼び出すか、オブジェクト自体を直接参照することに違いはありますか?
依存する
this
さまざまな形をとる可能性があるため、予測できません。
のような通常の関数呼び出しでfuncName()
はthis
、グローバル オブジェクトです。ブラウザーでは、それはwindow
オブジェクトです。
関数が「use strict」を使用する通常の関数呼び出しではthis
、undefined
.
のようなコンストラクタとして使用される関数の場合var instance = new ConstructorFunction()
、this
はそのコンストラクタから作成されたインスタンス オブジェクトを参照します。
オブジェクト リテラルの場合this
、関数を囲む即時オブジェクト リテラルです。
call(context,args...)
またはによって呼び出された場合apply(context,[args...])
、this
は何でもcontext
あります。
this
関数の呼び出し方法に応じて変更できます。
var funnyB = obj.b;
funnyB(); //this is window
提供したオブジェクト リテラル コンテキストでは、論理的な違いはありません。関数がプロパティ/メソッドであるオブジェクトへの参照であるため、キーワードは変数をthis
指します。obj
this