JavaScript における this ポイントの問題の詳細な説明

JavaScript における this ポイントの問題の詳細な説明

要約する

  • 地球環境 ➡️ ウィンドウ
  • 通常関数 ➡️ ウィンドウまたは未定義
  • コンストラクター ➡️ 構築されたインスタンス
  • 矢印関数➡️ 定義されている場合は外側のスコープで this
  • オブジェクトメソッド ➡️ オブジェクト
  • call(), apply(), bind() ➡️ 最初のパラメータ

地球環境

厳密モードに関係なく、これはウィンドウ オブジェクトを参照します。

console.log(this === window) // true
// 厳密モード 'use strict'
console.log(this === window) // true

通常機能

  1. 通常モード
    • これはウィンドウオブジェクトを参照します
    • 関数テスト() {
        この===ウィンドウを返す
      }
      
      console.log(test()) // 真
      
  2. 厳密モード
    • この値は未定義です
    • // 厳密モード 'use strict'
      
      関数テスト() {
        これを返す === undefined
      }
      
      console.log(test()) // 真
      

コンストラクタ

関数がコンストラクターとして使用される場合、これは構築されたインスタンスを指します。

関数テスト() {
  この数値 = 1
}

test1 = 新しい Test() とする

console.log(テスト1.番号) // 1

矢印関数

関数が矢印関数の場合、 this は関数が定義されたときの前のスコープ内の this 値を参照します。

テスト = () => {
  この===ウィンドウを返す
}

console.log(test()) // 真
obj = {
  番号: 1
}

関数foo(){
  戻り値 () => {
    this.numberを返す
  }
}

テスト = foo.call(obj) を実行します。

コンソール.log(テスト()) // 1

オブジェクトメソッド

関数がオブジェクトのメソッドとして使用される場合、this はオブジェクトを参照します。

obj = {
  番号: 1,
  取得番号() {
    this.numberを返す
  }
}

コンソール.log(obj.getNumber()) // 1

呼び出し()、適用()、バインド()

  • 関数の call() または apply() メソッドを呼び出すと、関数の this は渡された最初のパラメータを指します。
  • 関数の bind() メソッドが呼び出されると、返される新しい関数の this は渡された最初のパラメータを指します。
obj = {
  番号: 1
}

関数テスト(数値) {
  this.number + num を返す
}

コンソール.log(test.call(obj, 1)) // 2

コンソール.log(test.apply(obj, [2])) // 3

foo = test.bind(obj, 3) とします。
コンソール.log(foo()) // 4

JavaScript のこのポインティング問題の詳細なケースに関するこの記事はこれで終わりです。JavaScript のこのポインティング問題に関する関連コンテンツをさらにご覧になりたい場合は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • このポイントのJavaScriptの基本
  • JSの矢印関数におけるこのポイントの詳細な説明
  • このリファレンスとJavaScriptのカスタムプロパティの詳細な説明
  • 関数の分類の詳細な説明とJavascriptでのこのポイントの例
  • JavaScript関数におけるこのポイントの問題の詳細な説明
  • JavaScript プロトタイプオブジェクトの this ポイント問題の詳細な説明

<<:  Dockerにelasticsearchとkibanaをインストールする方法

>>:  MySQL における distinct と group by の違い

推薦する

Dockerでランナーコンテナを構成する方法

1. ランナーコンテナを作成する mk@mk-pc:~/Desktop$ docker run -d...

JavaScript でのカスタム スワイパー コンポーネントの詳細な説明

目次エフェクト表示コンポーネント設定ステップ1ステップ2ステップ3コンポーネントの使用ステップ1ステ...

HTML ブロックレベルタグとインラインタグの違い

1. ブロックレベル要素: 独立して存在できる能力を指します。通常、ブロックレベル要素は改行によって...

Nodejs で WeChat アカウント分割を実装するためのサンプルコード

会社のビジネスシナリオでは、WeChat アカウント分割機能を使用する必要があります。公式 Web ...

Linux システムによって報告される tcp_mark_head_lost エラーの処理方法

問題の説明最近、ホストから次のカーネル情報が報告されました。 7月8日 10:47:42 cztes...

Linux サーバーに SSH パスワードなしでログインする方法

テスト サーバーにログインするたびに、必ず ssh ログインのパスワードを入力する必要があります。ロ...

Linux で独自の Nexus プライベート サーバーを構築する方法

この記事では、Linuxサーバー上でDockerを使用してNexusプライベートサーバーを構築する方...

Centos システムの指定された場所に Nginx をインストールする方法

Centos システムの指定された場所に Nginx をインストールするにはどうすればいいですか?は...

HTMLを使用してシンプルなメールテンプレートを作成する

今日は、「ローテク」の問題について書きたいと思います。ちなみに、私は JavaScript Week...

JS の compose 関数と pipe 関数の使い方の詳細な説明

目次作成機能配列プロトタイプの削減Array.prototype.reduceRightパイプ関数作...

カレンダー効果を実現するJavaScript

この記事では、カレンダー効果を実現するためのJavaScriptの具体的なコードを参考までに紹介しま...

テキストエリアの disabled 属性と readonly 属性の具体的な使用法

障害者の定義と使用法disabled 属性はブール属性です。 disabled 属性は、テキスト領域...

MySQL の「特殊キーが長すぎます」の解決策

目次解決策1解決策2テーブルを作成するときに、興味深い問題に遭遇しました。「指定されたキーが長すぎま...

Windows 8 での ssh コマンドの使用記録

1. 仮想マシンとgit bashウィンドウを開き、接続の準備をします2. 仮想マシンでifconf...

MySQL テーブル結合クエリでグループ化と重複排除を実装する例

目次ビジネスロジックデータテーブル構造クエリロジックSQL スクリプトスクリプトの説明ビジネスロジッ...