[解決済み] Javascriptのthisポインタをネストされた関数内で使用する場合
2022-09-29 23:16:01
質問
ネストされた関数シナリオにおいて、"this" ポインタがどのように扱われるのかについて質問があります。
次のサンプル コードを Web ページに挿入するとします。ネストされた関数 "doSomeEffects()" を呼び出すと、エラーが発生します。 Firebugで確認したところ、そのネストした関数の中で、"this"ポインタが実際にはグローバルな"window"オブジェクトを指していることがわかりました。私は、オブジェクトの関数内でネストされた関数を宣言したので、関数との関係で "local"スコープを持つはずだと思っていたので、何かを正しく理解していないようです (つまり、最初の "if" 文でそうであるように、 "this" ポインタはオブジェクト自体を参照しているはずです)。
どんなポインタでも (ダジャレでなく) 感謝されるでしょう。
var std_obj = {
options : { rows: 0, cols: 0 },
activeEffect : "none",
displayMe : function() {
// the 'this' pointer is referring to the std_obj
if (this.activeEffect=="fade") { }
var doSomeEffects = function() {
// the 'this' pointer is referring to the window obj, why?
if (this.activeEffect=="fade") { }
}
doSomeEffects();
}
};
std_obj.displayMe();
どのように解決するのですか?
JavaScriptでは
this
オブジェクトは、実際には関数呼び出しをどのように行うかに基づいています。
一般に
this
オブジェクトを設定する方法があります。
-
someThing.someFunction(arg1, arg2, argN)
-
someFunction.call(someThing, arg1, arg2, argN)
-
someFunction.apply(someThing, [arg1, arg2, argN])
上記のすべての例では
this
オブジェクトは
someThing
.
先頭の親オブジェクトを指定せずに関数を呼び出すと、通常は
グローバル
オブジェクトを取得します。これは、ほとんどのブラウザでは
window
オブジェクトを意味します。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] JavaScriptのArray.sort()メソッドでシャッフルするのは正しいのか?
-
[解決済み] リダイレクトされずにHTMLフォームを送信する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] JavaScriptで次の要素/前の要素を取得しますか?
-
[解決済み] Google maps API V3 - 同一地点に複数のマーカーを設置する。
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] ECMAScriptとは?
-
[解決済み] Promise : then vs then + catch [重複].
-
[解決済み] javascriptのキャンバスで画像をリサイズする (スムーズ)