0

あるインタビュアーは、これが次のコードで何を表しているのか説明するように私に求めました。私はそれについて知りませんでした。そのようなコードは今まで見たことがなかったからです。これら2つに違いはありますか、また、そのようなコードはどのような状況で役立ちますか?

function A(){
    this.x=1;//No.1
    function B(){
        this.y=2;//No.2
    }
}

new を使用して新しいオブジェクトを作成すると、プロパティ x が 1 に等しいことしかわかりません。

4

3 に答える 3

4

それは、関数の呼び出し方法によって異なります。次のように、通常の関数として呼び出す場合:

A();

次に、ドキュメントthiswindowオブジェクトになります。

この関数をオブジェクト コンストラクターとして使用する場合は、次のようになります。

var a = new A();

次にthis、新しく作成されたオブジェクトへの参照になります。

関数を呼び出すことができないため、関数this内の参照は決して何もありません。Bこれは関数内でローカルであり、関数を呼び出すために使用できるAコードが関数内にないため、呼び出されることはありません。AB

関数を呼び出せるようにすれば、B関数と同じことが言えAます。何thisが機能するかは、機能の使用方法によって異なります。関数がコンストラクターとして使用されている場合 (したがってのオブジェクト参照である場合)、関数B内から関数を呼び出しても、関数はから継承されません。への参照(が関数として使用される場合) または新しく作成されたオブジェクトへの参照 (がコンストラクターとして使用される場合) のいずれかです。AAthisABthisAwindowBB

于 2012-10-21T09:08:29.203 に答える