JavaScriptの詳細な分析と方向の変更方法

JavaScriptの詳細な分析と方向の変更方法

これ

いつものように、まずはコードを見てみましょう。

方法

関数テスト(){
    console.log(これを);
}

ここに画像の説明を挿入

オブジェクト内

人={
  名前:"張三",
  食べる:関数(){
      console.log(これ)
  }
}

ここに画像の説明を挿入

メソッドでは、this はメソッドが属するオブジェクトを参照します。最初のものは window のメソッドなので、window が出力され、eat メソッドは Person メソッドなので、オブジェクト Person が出力されます。

したがって、コンソールでこれを単独で使用すると、グローバル オブジェクトが表されることがわかります。

ここに画像の説明を挿入

これを隠した

オブジェクトでは、事前に 1 つずつ宣言できます。

var Person1 = {
    名前:"張三",
    年齢:18
}
var Person2 = {
    名前:"Li Si",
    年齢:19
}

これを書くのは非常に面倒なので、次のように Java クラスの概念から学ぶことができます。

var Person = 関数 (名前, 年齢) {
    this.name=名前、
    this.age=年齢
       
}
var Person1=new Person("张三",18);
var Person2 = new Person("李斯",19);

ここに画像の説明を挿入

実際、new には return this が隠されています。new を使用しないと、新しく作成されたオブジェクトが返されないことがわかります。

ここに画像の説明を挿入

では完成させましょう:

var Person = 関数 (名前, 年齢) {
    this.name=名前、
    this.age=年齢
    これを返します。
}
var Person1=new Person("张三",18);
var Person2 = new Person("李斯",19);

ここに画像の説明を挿入

この方法では、次の効果を偽装することもできます。

var Person = 関数 (名前, 年齢) {
    var = {};
    that.name=名前、
    that.age=年齢
    それを返す;
}
var Person1=new Person("张三",18);
var Person2 = new Person("李斯",19);

ここに画像の説明を挿入

厳密モード

これは、厳密モードと非厳密モードで魔法のような動作をします

関数テスト() {
  これを返します。
}

# js の前に「use strict」を追加すると、厳密モード「use strict」を意味します。
関数テスト() {
  これを返します。
}

ここに画像の説明を挿入

これは、非厳密モードの関数では、関数の所有者がデフォルトでこれにバインドされていることを示しています。したがって、グローバル値は印刷できますが、厳密モードでは関数はこれにバインドされないため、これは未定義になります。

これを変更して

まずコードを見てみましょう

var Person = 関数 (名前, 年齢) {
    this.name=名前、
    this.age=年齢、
    this.fun = 関数(){
         console.log("print", this.name);
        }
}
var Person1=new Person("张三",18);
var Person2 = new Person("李斯",19);




ここに画像の説明を挿入

これはメソッド test 内の値ではなく、window 内の a の値を指していることがわかりますが、一部のキーワードはポインターを変更できます。

ここに画像の説明を挿入

メソッドの前のオブジェクトが何であるか、呼び出し内の this が何であるかはわかりますが、キーワード call、apply、bind を使用して変更することもできます。

ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入

上記から、call と apply は非常に似ていることがわかりますが、bind は関数をすぐに実行しないため、() で囲む必要があります。

ただし、パラメータを指定すると、call と apply は依然として異なるものの、どちらもオブジェクトを含む必要があることがわかります。結局のところ、this はオブジェクトを指しています。

キーワード直接メソッド呼び出しパラメータ
電話使用されたメソッドを自動的に実行しますどちらも次の形式のパラメータを持つことができます: obj1.obj1Fun.call( obj2, パラメータ 1, パラメータ 1 ………………);
適用する使用されたメソッドを自動的に実行しますどちらもパラメータを取ることができます。形式は以下のとおりです: obj1.obj1Fun.apply([obj2, パラメータ 1, パラメータ 1 ………………]); call のパラメータと比較すると、そのパラメータは [] で囲まれています。
バインドメソッドは自動的に実行されないため、呼び出すには +() を追加する必要があります。どちらも次の形式でパラメータを取ることができます: どちらも次の形式でパラメータを取ることができます: obj1.obj1Fun.bind( [obj2, パラメータ1, パラメータ1 ………………])(); applyのパラメータは同じですが、+()が後に続く必要があります。

これで、JavaScript の this の方向の詳細な分析と、方向を変更する方法に関するこの記事は終了です。JavaScript の this の方向に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

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

<<:  this.parentNode.parentNode (親ノードの親ノード) はどういう意味ですか?

>>:  MySQLデータベースに接続し、クエリ操作を実行するためのIDEAの完全なコード

推薦する

VMWare 仮想マシン 15.X LAN ネットワーク構成チュートリアル図

最近、分散型およびビッグデータ技術について学ぶために、いくつかの仮想マシンに取り組んでいます。まず、...

Angularフレームワークのビュー抽象定義の詳細な説明

序文「大規模なフロントエンド プロジェクト向け」に設計されたフロントエンド フレームワークである A...

MySQL 基本チュートリアル パート 1 MySQL5.7.18 のインストールと接続チュートリアル

この記事から、MySQL を紹介し学習するための新しい一連の記事がスタートします。なぜ MySQL ...

mysql indexof関数の使用手順

以下のように表示されます。 LOCATE(部分文字列、文字列)文字列 str 内の部分文字列 sub...

ウェブサイトのテキストはまだデザインする必要がありますか?

多くの人が、ウェブサイト上のテキストはデザインする必要があるのか​​と疑問に思うかもしれません。多く...

Docker で onlyoffice をインストールして展開する詳細なプロセス

0. システム要件CPU I5-10400F以上メモリ 16 GB、32 GBのメモリが最適ハードド...

MySQLは「order by」がどのように機能するかを簡単に理解します

並べ替えの場合、order by は非常に頻繁に使用するキーワードです。インデックスに関するこれまで...

デュアル VIP を使用した高可用性 MySQL クラスタの構築

目次1. プロジェクトの説明: 2. プロジェクト環境: 2. プロジェクトの手順: 3. プロジェ...

MySQLの日次統計レポートでは、その日にデータがない場合には0が入力されます。

1. 問題の再現:各日の合計数を日ごとにカウントします。データのない日がある場合、グループ化によっ...

Linux 上の Nginx に複数のバージョンの PHP をインストールする

サーバーの LNPM 環境をインストールして構成する場合、複数のバージョンの PHP の共存を考慮す...

JavaScriptはPromiseを使用して複数の繰り返しリクエストを処理します

1. なぜこの記事を書くのですか?重複リクエストの処理に関する記事をたくさん読んだことがあるでしょう...

Python ベースの MySQL レプリケーション ツールの詳細な説明

目次1. はじめに2回目の練習2.1 インストールと設定2.2 コアクラスの紹介2.3 使い方は? ...

太陽系の惑星のアニメーション効果を実現するHTML+CSS3コード

太陽系の 8 つの惑星(衛星を除く)のアニメーションを作成します。すべての惑星は太陽の周りを回ってい...

Vue フロントエンドの Excel ファイルのエクスポートの詳細な実装計画

目次1. 技術の選択2. 技術的な実装vue-json-excelプラグインを使用して実装1. vu...

Nginx ストリーム構成プロキシ (Nginx TCP/UDP ロード バランシング)

序章nginx が優れたリバース プロキシ サービスであることは誰もが知っています。nginx を使...