[解決済み] 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
). これは
クロージャ
.
関連
-
vueディレクティブv-bindの使用と注意点
-
Uncaught TypeError: null のプロパティ 'offsetHeight' を読み取れませんでした。
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] event.preventDefault() vs. return false
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Vueにシンプルなメモ帳機能を実装
-
Javascript Bootstrapのグリッドシステム、ナビゲーションバー、ローテーションの説明
-
vue ディレクティブ v-html と v-text
-
Vueのフォームイベントのデータバインディングの説明
-
[解決済み】TypeError: Router.use() はミドルウェアの関数を要求しているが、Object を取得した。
-
[解決済み】Node.js Error: Cannot find module express
-
[解決済み】JavaScriptエラー(Uncaught SyntaxError: Unexpected end of input)
-
[解決済み】ERROR エラーです。スイッチのname属性が指定されていないフォームコントロールの値アクセッサがない
-
[解決済み】 Uncaught TypeError : undefined のプロパティ 'replace' を読み取れない In Grid
-
フロントエンド null のプロパティ 'disabled' を読み取れない 問題が解決された