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

推薦する

NODE.JS を使用して WEBSERVER を作成する手順

目次Node.jsとはNodeJSをインストールするNode を使用して Hello World を...

React の 10 個のフックの紹介

目次ReactHook とは何ですか? Reactは現在フックを提供している1. 使用状態2.use...

デザイン視点技術はデザイン能力の重要な資本である

ある設計士はこう尋ねた。「実際のプロジェクト制作には参加せずに、純粋に設計だけをすることはできますか...

html+cssレイアウトの3つの方法(ナチュラルレイアウト/フローレイアウト/ポジショニングレイアウト)

1. 自然なレイアウト<br />レイアウトは変更せずに自動的に左揃えになります。 2....

水平スクロールバーを実装する2つの方法の例

序文:プロジェクトの開発中に、1 行にナビゲーション バーが多すぎる場合に水平スクロール バーを実装...

HTML/CSS の基礎 - HTML コード記述におけるいくつかの注意事項 (必読)

この記事の警告事項は、ブラウザの互換性とはまったく関係ありません。主に、プロジェクトで遭遇したいくつ...

ReactRouterの実装

ReactRouterの実装ReactRouterはReactのコアコンポーネントです。主にReac...

Vue シングルファイルコンポーネントの実装

最近、vue について読みました。これまで基本的に見落としていた単一ファイル コンポーネントを見つけ...

Bツリーの特性の紹介

B ツリーは一般的なデータ構造です。彼と一緒にB+ツリーがあります。ここで、概念を明確にする必要があ...

React Nativeでaxiosを使用してネットワークリクエストを行う方法

フロントエンド開発では、Ajax、jQuery ajax、axios、fetch など、データ要求を...

CSS の記述基準と順序を共有する [すべての人に使用を推奨]

CSSの記述順序1. 位置属性(位置、上、右、z-index、表示、フロートなど) 2. サイズ(...

Dockerのオンラインおよびオフラインインストールと一般的なコマンド操作

1. テスト環境名前バージョンセント7.6ドッカー18.09.06 2. オンラインインストールここ...

Windows 7 環境での Docker 高速ビルドと Alibaba Cloud コンテナ高速化構成の詳細な説明

前回の Docker に関する記事では、MAC システムでの構築について説明しました。この記事では、...

jsを使用してカルーセル効果を実現する

今日は、参考までに、jsを使用してカルーセルマップの効果を実現する方法についてお話ししましょう。具体...