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 の違い

推薦する

Linux サービス管理の 2 つの方法、service と systemctl の詳細な説明

1.サービスコマンドサービスコマンドは実際には/etc/init.dディレクトリに移動し、関連プログ...

Tomcat プロセスの CPU 使用率が高い場合の解決策

目次場合コンテキスト切り替えのオーバーヘッド?要約するCPU は多くの場合、システム パフォーマンス...

JavaScript Promise の徹底解説

目次1. Promise とは何ですか? 2. なぜ Promise が存在するのでしょうか? 3つ...

Linux は、ディレクトリが存在するかどうかを判断するために if を使用します。

Linux で if を使用してディレクトリが存在するかどうかを判断する方法方法は次のとおりです。...

HTML チュートリアル: よく使われる HTML タグのコレクション (5)

関連記事:初心者が学ぶ HTML タグ (4)導入された HTML タグは、必ずしも XHTML 仕...

CSSアニメーション効果アニメーションの一般的なスタイル

アニメーションアニメーションを定義します。 /*アニメーションの各ステップで実行されるアクションを定...

MySQL/MariaDB でピボット テーブルを実装する方法のサンプル コード

前回の記事では、Oracle でピボット テーブルを実装するいくつかの方法を紹介しました。今日は、同...

ES6 における Object.assign() の使い方の詳細な説明

目次2. 目的2.1 オブジェクトにプロパティを追加する2.3 オブジェクトの複製2.4 複数のオブ...

印刷広告を成功させるための「3I」基準

国内の多くの広告主にとって、印刷広告の制作と評価は、しばしばかなり主観的です。自分の感情や美的感覚に...

MySQL 8.0.16 Win10 zip バージョンのインストールと設定のグラフィック チュートリアル

この記事では、MySQL 8.0.16 Win10 zip版のインストールと設定のグラフィックチュー...

MySql 8.0.11-Winxp64 (無料インストール版) ​​設定チュートリアル

1. インストールディレクトリにzipパッケージを解凍します。まず、mysql-8.0.11-win...

Ubuntu 上の MySQL における中国語文字化け問題の解決方法

問題を見つける最近 Django を学習しているのですが、MySQL データと組み合わせてデータを挿...

Reactでコンポーネントロジックを共有する3つの方法

簡単に説明すると、これら 3 つの方法は、レンダリング プロップ、高階コンポーネント、カスタム フッ...

Docker+Jenkinsを使用して自動的にビルドおよびデプロイする

この記事では、Docker+Jenkins の自動ビルドデプロイメントを紹介し、皆さんと共有します。...