1. ホーム
  2. javascript

[解決済み] JavaScript "私" = "これ"、なぜ?

2022-03-16 12:23:02

質問

多くのソースコードで見かけました。

var me = this;

Ext-JS 4 (JSフレームワーク)に特化したものです。なぜそのようなことをするのですか?何か他の理由があるのでしょうか、それともただ単に "this" の代わりに "me" のように変数を呼び出したいだけなのでしょうか?

ありがとうございました。

解決方法は?

通常は this が含まれるスコープ内で this は他のもの (例えばコールバック関数など) を参照しています。

この例では、クリックイベントハンドラ関数が、あなたが期待するものとは異なるコンテキストを持っていることを考えます ( this のインスタンスを参照しているわけではありません。 MyClass ):

var MyClass = function (elem) {
    this.elem = elem;
    this.name = "James";
    elem.addEventListener("click", function () {
        alert(this.name); //oops
    }, false);
};

の値への参照を格納する例を考えてみましょう。 this をコンストラクタ関数内で使用し、それをコールバック関数内で使用します。

var MyClass = function (elem) {
    var me = this;
    this.elem = elem;
    this.name = "James";
    elem.addEventListener("click", function () {
        alert(me.name); //works!
    }, false);
};

コールバック関数は、外側の関数で宣言された変数が返された後でも、その変数を参照することができます (コールバック関数が返された後でも、外側の関数で宣言された変数を参照することができます)。 MyClass を実行した時点で、コンストラクタが返ります。 addEventListener ). これは クロージャ .