5

私は、明らかにまだ理解していないことを示す何かに出くわします。

以下で「this」の値が変化する理由を誰か説明してもらえますか?

var MyFunc = function(){
    alert(this);
    var innerFunc = function(){
        alert(this);
    }
    innerFunc();
};

new MyFunc();
4

4 に答える 4

18

JavaScript では、関数が定義されたスコープ (または関数が呼び出されたスコープ) ではなく、関数が呼び出さthisれたコンテキスト オブジェクトを表します。の場合、これは作成される新しいオブジェクトを参照します。ただし、の場合、が呼び出されたときにコンテキストが指定されていないため、グローバル オブジェクトを参照します。MyFuncinnerFuncinnerFunc

thisこれは、ほとんどの場合、呼び出されるメソッドが定義されているクラスのインスタンスを参照するJava または類似の OO 言語に慣れている人をつまずかせる傾向があります。覚えておいてください: JavaScript にはメソッドがありません。またはクラス。オブジェクトと関数だけです。

参照: JavaScript での「this」キーワードの動作の根拠は何ですか?

于 2009-03-16T22:27:42.703 に答える
2

次の手順を実行してください。

var MyFunc = function(){
    var self = this;
    alert(self);
    var innerFunc = function(){
        alert(self);
    }
    innerFunc();
};

new MyFunc();

このように、self は、どこから呼び出しているかに関係なく、常にこれを意味します。通常は、これが必要です。

于 2009-03-17T09:27:57.360 に答える
1

補足として、「this」は必ずしも実際の関数を常に参照しているわけではありません。「強制的な」this参照で関数を呼び出すことができるため、thisが実際の要素を参照するイベントハンドラーについて考えてください。それがイベントを発生させました。

使用して

yourFunction.apply(thisReference, arguments)

「this」が最初の引数として渡すものを指す場所で呼び出すことができます。

于 2009-03-16T22:39:55.077 に答える
-1

一見すると、外側の 'this' が MyFunc を参照しており、内側の 'this' が innerFunc を参照しているためだと思います。

ただし、Javascript は私が特別な専門知識を持っているものではありません。

于 2009-03-16T22:25:14.097 に答える