[解決済み] var self = this?
2022-02-08 18:08:20
質問
イベントハンドラのコールバックとしてインスタンスメソッドを使用することで、以下のスコープが変更されます。
this
から
私のインスタンス"
から
"今コールバックを呼び出したものは何でも"
. だから、私のコードは次のようになります。
function MyObject() {
this.doSomething = function() {
...
}
var self = this
$('#foobar').bind('click', function(){
self.doSomethng()
// this.doSomething() would not work here
})
}
動作はするのですが、その方法がベストなのでしょうか?私には不思議に見えます。
どのように解決するのですか?
この質問はjQueryに特化したものではなく、JavaScript全般に特化したものです。核心的な問題は、埋め込み関数で変数をどのように"channel"するかということです。これはその例です。
var abc = 1; // we want to use this variable in embedded functions
function xyz(){
console.log(abc); // it is available here!
function qwe(){
console.log(abc); // it is available here too!
}
...
};
このテクニックは、クロージャを使うことに依存しています。しかし、これは
this
なぜなら
this
は、スコープからスコープへ動的に変化する可能性のある擬似的な変数です。
// we want to use "this" variable in embedded functions
function xyz(){
// "this" is different here!
console.log(this); // not what we wanted!
function qwe(){
// "this" is different here too!
console.log(this); // not what we wanted!
}
...
};
どうすればいいのでしょうか?何らかの変数に代入して、エイリアスを介して使用します。
var abc = this; // we want to use this variable in embedded functions
function xyz(){
// "this" is different here! --- but we don't care!
console.log(abc); // now it is the right object!
function qwe(){
// "this" is different here too! --- but we don't care!
console.log(abc); // it is the right object here too!
}
...
};
this
は、この点ではユニークではない。
arguments
は、同じようにエイリアスで処理されるべき他の擬似変数です。
関連
-
[解決済み】getElementByIdはnullを返す?[クローズド]
-
[解決済み】FirefoxでGoogle Maps V3をリモートで使用すると「googleが定義されていません」と表示される。
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] event.preventDefault() vs. return false
-
[解決済み] セレクタの子を取得する方法は?
-
[解決済み] どのような場合に '$this' よりも 'self' を使うべきですか?
-
[解決済み] varキーワードの目的と、どのような場合に使用する(または省略する)べきですか?
-
[解決済み] セルフクローズスクリプトエレメントが機能しないのはなぜですか?
-
[解決済み] Reactコンポーネント外でのクリックを検出する
-
[解決済み] JavaScriptの慣用句、var self = thisの根底にあるものは?
最新
-
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で':'(コロン)は何をするのか?
-
[解決済み] Uncaught TypeError: 未定義のプロパティ 'top' を読み込めない
-
[解決済み】webpack-dev-serverにリモート接続すると、「Invalid Host header」というメッセージが表示されます。
-
[解決済み】JavaScriptのinnerHTMLで要素が更新されない
-
[解決済み】コンソールがUnterminated JSX contentsエラーを投げる【終了しました
-
[解決済み】SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み】JS ファイルが net::ERR_ABORTED 404 (Not Found) を取得する)
-
[解決済み】未定義のプロパティ 'forEach' を読み取ることができない
-
[解決済み] JavaScriptで「var that = this;」とはどういう意味ですか?
-
[解決済み] JavaScriptの慣用句、var self = thisの根底にあるものは?