私が持っている場合:
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指します。objthis