2

私が持っている場合:

var obj={
    a:function(){obj.b();},
    b:function(){this.a();}
};

メソッドと同じスコープにあるため、「this」を使用してオブジェクトメソッドを呼び出すか、オブジェクト自体を直接参照することに違いはありますか?

4

3 に答える 3

3

依存する

thisさまざまな形をとる可能性があるため、予測できません。

  • のような通常の関数呼び出しでfuncName()this、グローバル オブジェクトです。ブラウザーでは、それはwindowオブジェクトです。

  • 関数が「use strict」を使用する通常の関数呼び出しではthisundefined.

  • のようなコンストラクタとして使用される関数の場合var instance = new ConstructorFunction()thisはそのコンストラクタから作成されたインスタンス オブジェクトを参照します。

  • オブジェクト リテラルの場合this、関数を囲む即時オブジェクト リテラルです。

  • call(context,args...)またはによって呼び出された場合apply(context,[args...])thisは何でもcontextあります。

于 2012-05-07T15:35:59.443 に答える
2

this関数の呼び出し方法に応じて変更できます。

var funnyB = obj.b;
funnyB();  //this is window
于 2012-05-07T15:36:04.223 に答える
0

提供したオブジェクト リテラル コンテキストでは、論理的な違いはありません。関数がプロパティ/メソッドであるオブジェクトへの参照であるため、キーワードは変数をthis指します。objthis

于 2012-05-07T17:24:23.260 に答える