JS 関数とコンストラクタを簡単に理解する

JS 関数とコンストラクタを簡単に理解する

1. 概要

Function 、関数を作成するために使用できるコンストラクターです。作成された関数は Function オブジェクトです。実際、作成にどのメソッドが使用されたとしても、それは Function オブジェクトです。本質的に、関数名は単なる変数名であり、Function オブジェクトへの参照を指します。

認証コードは次のとおりです。

var f = 関数() {
  console.log('これはf関数です');
}
// 関数もオブジェクトです console.log(f instanceof Object); // true
// 関数は Functionconsole.log(f instanceof Function); の型のオブジェクトです。 // true

1.1 Functionコンストラクタを使用して関数を作成する

Function **** コンストラクターは新しい Function オブジェクトを作成します。このコンストラクターを直接呼び出すと、関数を動的に作成できます。

文法構造は次のとおりです。

var functionName = 新しい関数 ([arg1[, arg2[, ...argN]],] 関数本体)


functionNameは関数名、[arg1[, arg2[, ...argN]],]はオプションのパラメータリスト、functionBodyは関数を表します。

サンプルコードは次のとおりです。

// パラメータのない関数 var fun = new Function('console.log("This is a function")')
fun() // これは関数です // 1 つのパラメータを持つ関数 var fun = new Function('a', 'console.log("この関数は 1 つのパラメータを取ります: " + a)')
fun(100) // この関数は1つのパラメータを取ります: 100
// 2つのパラメータを持つ関数 var fun = new Function(
  「a, b」、
  'console.log("これは 2 つのパラメータ " + a + " と " + b" を持つ関数です);',
)
fun(100, 200) // これは100と200の2つのパラメータを持つ関数です

実際の開発では、まったく読みにくいため、この方法で関数を作成することは通常ありません。

1.2 機能と目的

  • Object型とFunctionはJavaScriptの参照型の1つです。
  • コンストラクタも関数の一種である
  • 関数は実際にはFunction型のオブジェクトである
  • JavaScript のすべてのオブジェクトは Object 型です。

認証コードは次のとおりです。

console.log(関数インスタンスの関数) //true
console.log(関数インスタンスオブオブジェクト) //true
console.log(Object インスタンス of Object) //true
console.log(オブジェクトインスタンス関数) //true

2. コンストラクター

2.1 カスタムのその他の関数

コンストラクター (コンストラクターまたはオブジェクト テンプレートとも呼ばれます) は、オブジェクトがインスタンス化されるときに呼び出されるオブジェクト内のメソッドです。 JavaScriptでは、関数をコンストラクターとして使用できるため、コンストラクター メソッドを明示的に定義する必要はありません。

コンストラクターを作成するための構文は次のとおりです。

関数Person(){
  this.property名 = プロパティ値;
  this.メソッド名 = 関数() {
      メソッド本体}
var person = 新しい Person();


ここで、 Personコンストラクターの名前です。Person をインスタンス化するには、new キーワードを使用する必要があります。また、コンストラクターの最初の文字は通常大文字になる点にも注意してください。

次のコードは、コンストラクターを作成する方法と、コンストラクターを通じてクラスをインスタンス化する方法を示しています。

// カスタムコンストラクター -> 関数: オブジェクトを作成する function Person(name, age, sex) {
  this.name = 名前
  this.age = 年齢
  this.sex = セックス
  this.print = 関数(){
    console.log(名前 + '今年' + 年齢 + '年齢と性別' + 性別)
  }
}
// お菓子のボウルを作成する var t = new Person('a bowl of sweets', 18, 'female')
hong.print() // Yiwantian は 18 歳で女性です // Yiwanzhou を作成します var z = new Person('Yiwanzhou', 20, 'male')
dong.print() //お粥一杯、20歳、男性

2.2 オブジェクトのコンストラクタプロパティ

Objectオブジェクトによって提供されるconstructorプロパティは、インスタンス オブジェクトObjectを作成するコンストラクターへの参照を返します。

すべてのオブジェクトはプロトタイプからコンストラクター プロパティを継承します。

このプロパティの値は関数名を含む文字列ではなく、関数自体への参照であることに注意することが重要です。

サンプルコードは次のとおりです。

// Yiwan Zhou を作成 var z = new Person('Yiwan Zhou', 18, '男性')
// Person コンストラクタのオブジェクトかどうかを確認します console.log(z.constructor === Person)

2.3 コンストラクタと関数

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

関数Hero() {
  // 関数として使用 var v = 100 // ローカル変数 // コンストラクターとして使用 this.set = function (value) {
    v = 値
  }
  this.get = 関数 () {
    リターンv
  }
}


このコードでは、まず関数を定義します。この関数はコンストラクターでもあり、もちろんオブジェクトでもあります。

3つの意味があるので、以下のように3つの操作があります。

  • 関数として直接呼び出す
  • コンストラクタによるオブジェクトの作成
  • オブジェクトとして扱い、プロパティやメソッドを追加します

サンプルコードは次のとおりです。

// Hero() を直接呼び出す
// コンストラクターを通じてオブジェクトを作成する var hero = new Hero()
// オブジェクトとして扱い、プロパティとメソッドを追加します。Hero.n = 'A bowl of Zhou'
console.log(Hero.n) // 一杯の周

3. Functionオブジェクトのプロパティとメソッド

グローバルFunctionオブジェクトには独自のプロパティとメソッドはありませんが、関数でもあるため、プロトタイプ チェーンを通じて独自のプロトタイプ チェーン Function.prototype からいくつかのプロパティとメソッドも継承します。

3.1長さ属性

長さ属性は、関数の仮パラメータの数を示します。サンプル コードは次のとおりです。

// 2つの空の関数を定義します。 function fun(a, b, c, d) {}

関数 fn() {}

// 長さプロパティをテストする console.log(fun.length) // 4
console.log(fn.length) // 0

apply() メソッド:

apply() メソッドは、指定された this 値と、配列 (または配列のようなオブジェクト) として提供される引数を使用して関数を呼び出します。

構文の形式は次のとおりです。

func.apply(thisArg、[argsArray]) を適用します。


パラメータの説明は次のとおりです。

  • thisArg : 必須。 func 関数の実行時に使用する this 値。これはメソッドによって表示される実際の値ではない可能性があることに注意してください。関数が非厳密モードの場合、null または undefined の割り当ては、プリミティブ値がラップされたグローバル オブジェクトへの参照に自動的に置き換えられます。
  • argsArray : オプション。配列または配列のようなオブジェクト。その配列要素は、func 関数に個別のパラメータとして渡されます。このパラメータの値が null または未定義の場合、パラメータは不要であることを意味します。配列のようなオブジェクトは ECMAScript 5 以降で利用できます。

戻り値は、指定された this 値と引数を使用して関数を呼び出した結果です。

次のコードは、apply() メソッドの使用方法を示しています。

// 関数を定義する function fn(a) {
  console.log('これは ' + a です)
}
fn.apply(null, ['function']) // これは関数です // 上記の呼び出しは次のメソッドと同等です fn('function') // これは関数です

3.2call() メソッド

このメソッドの構文と機能はapply()メソッドと似ていますが、1 つの違いがあります。call() メソッドはパラメータ リストを受け入れるのに対し、 apply()メソッドは複数のパラメータを含む配列を受け入れます。

次のコードは call() メソッドの使用方法を示しています。

関数fn(a) {
  console.log('これは ' + a です)
}
fn.call(null, 'function') // これは関数です // 上記の呼び出しは次のメソッドと同等です fn('function') // これは関数です

bind() メソッド:
ind() メソッドは新しい関数を作成します。bind() が呼び出されると、新しい関数の this が bind() の最初のパラメータとして指定され、残りのパラメータは呼び出し時に使用する新しい関数のパラメータとして使用されます。

パラメータの説明は次のとおりです。

関数.bind(thisArg[, arg1[, arg2[, ...]]])

パラメータ:

thisArg : バインドされた関数が呼び出されたときに、 this 引数としてターゲット関数に渡される値。

arg1arg2 、...: ターゲット関数が呼び出されたときに、バインドされた関数の引数リストの先頭に追加される引数。

戻り値は、指定された **this** 値と初期パラメータを持つ元の関数のコピーです。

次のコードは bind() メソッドを示しています。

// 関数を定義する var fun = function (a, b) {
  console.log('最初のパラメータの値は:' + a + '2番目のパラメータの値は:' + b)
}
// fun() を呼び出す
fun(10, 20) // 最初のパラメータの値は: 10 2 番目のパラメータの値は: 20
// バインドされた関数を作成する var fn = fun.bind(null, 100, 200) // デフォルトのパラメータ値を持つ関数 // 実際のパラメータを記述せずに新しく作成された関数を呼び出す fn() // 最初のパラメータの値は: 100 2 番目のパラメータの値は: 200

4. 引数オブジェクト

argumentsオブジェクトは、すべての (矢印以外の) 関数で使用できるローカル変数です。引数オブジェクトを使用して、関数内から関数の引数を参照できます。このオブジェクトには、関数に渡される各引数が含まれており、最初の引数はインデックス 0 になります。たとえば、関数に 3 つのパラメータが渡される場合、次のように参照できます。

議論[0]
議論[1]
議論[2]

パラメータも再定義できます。オブジェクトには次の 2 つのプロパティもあります。

  • arguments.length : 関数に渡された引数の数を返します
  • arguments.callee : 引数が属する現在実行中の関数へのポインターを返します。このプロパティの後に () が続く場合、arguments.callee === fun が true と評価されるため、この関数を呼び出すことを意味します。

次のコードは、このオブジェクトの使用方法を示しています。コードは次のとおりです。

/*
 * 引数オブジェクトは、関数本体内に存在する特別なオブジェクトです。
 * 引数オブジェクトは配列のようなオブジェクトです * 引数オブジェクトは関数に渡される実際のパラメータに対応します */
// 関数を定義する var fun = function () {
  console.log(引数)
  // arguments.callee は、引数が属する現在実行中の関数を指します。
  //このプロパティに括弧を追加すると、呼び出しを意味します。 arguments.callee === fun はtrueと評価されるので
  console.log(引数.呼び出し先)
  // arguments.length 関数に渡される引数の数。
  console.log(引数の長さ)
}
楽しい(1, 2, 3, 4, 5) 


コード実行結果は次のとおりです。

[引数] { '0': 1、 '1': 2、 '2': 3、 '3': 4、 '4': 5 }
[機能:楽しい]
5


関数のオーバーロードを完了するために渡されるパラメータの数を決定するには、arguments.length プロパティを使用します。サンプル コードは次のとおりです。

// シミュレーション関数のオーバーロード function add() {
  // パラメータの数を記録する var len = arguments.length
  // オーバーロードされた関数をシミュレートするために渡されるパラメータの数を決定するには、switch case ステートメントを使用します switch (len) {
    ケース2:
      引数[0] + 引数[1]を返す
      壊す
    ケース3:
      引数[0] + 引数[1] + 引数[2]を返す
      壊す
    ケース4:
      引数[0] + 引数[1] + 引数[2] + 引数[3]を返す
      壊す

    デフォルト:
      壊す
  }
}
コンソール.log(add(1, 2)) // 3
コンソール.log(add(1, 2, 3)) // 6
コンソール.log(add(1, 2, 3, 4)) // 10

5. まとめ

この記事では、コンストラクターを作成する方法、コンストラクターを介してオブジェクトをインスタンス化する方法、および Function オブジェクトが提供するメソッドとプロパティについて説明します。使い方と最後に Arguments オブジェクトを紹介します。

JS 関数とコンストラクタに関するこの記事はこれで終わりです。より関連性の高い JS 関数とコンストラクタのコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Js クラスの構築と継承のケースの詳細な説明
  • JavaScript クラス継承の複数の実装方法
  • js クラスの継承定義と使用法の分析
  • JS 継承の分類、原則、使用法について深く理解するには 15 分かかります。
  • JavaScript のコンストラクター、プロトタイプ、プロトタイプ チェーン、new についてどれくらい知っていますか?
  • JavaScript の知識: コンストラクタも関数である
  • JavaScript のクラス、継承、コンストラクタの詳細な説明

<<:  HTML リスト タグ dl、ul、ol の使用例

>>:  MySQLにおける遅いSQLの最適化の方向性について詳しく話しましょう

推薦する

サーバー上で selenium+chromedriver を実行するための詳細なチュートリアル

1. はじめにSelenium を使用して Web サイトからデータをスクレイピングしたいのですが、...

HTMLはBaidu百科事典のナビゲーションドロップダウンメニュー機能を模倣します

HTML は、Baidu 百科事典のナビゲーション ドロップダウン メニュー機能を模倣します。具体的...

Vue ルーター vue-router 詳細説明ガイド

中国語ドキュメント: https://router.vuejs.org/zh/ Vue Router...

Element UI をインストールして vue3.0 でベクター グラフィックスを使用する方法

ここでは、v3 のインストールと使用にのみ焦点を当てます。v2 について学びたい場合は、公式 Web...

vue3 における vuex と pinia の落とし穴

目次導入インストールと使用方法文章の相違点と類似点の簡単な比較VuexとPiniaの長所と短所Pin...

Apache をインストールした後、サービスを開始できません (サービスを開始するとエラー コード 1 が表示されます)

目次1. エラーメッセージ2. エラーの原因3. 解決策1. エラーメッセージ1. インストール後、...

CSS を使用して複数の方法で下揃えを実装するサンプル コード

会社のビジネス要件により、次の図の赤い領域の効果を達成する必要があります。 効果の説明: 1. 赤い...

Linux での MySQL データベースのマスター スレーブ同期レプリケーション構成

Linux での MySQL データベースのマスター/スレーブ同期構成の利点は、この方法をバックアッ...

フォーム内のどの隠し属性をフォームとともに送信できるか

フォーム内の visibility=hidden および display=none のフォーム要素は...

VMware を使用して PXE バッチ インストール サーバーをテストする詳細なプロセス

目次1. 準備1. 環境を整える2. インストール方法3. ネットワークカードの構成2. インストー...

MySQLデータのグループ化の詳細な説明

グループを作成グループ化は、SELECT ステートメントの GROUP BY 句で設定されます。例:...

Vue の詳細な入門ノート

目次1. はじめに2. 初期ビュー(I) Vueの概念を理解する(II) MVVMアーキテクチャ(I...

CSS 不透明度子要素が親要素の透明度を継承するためのソリューションの詳細な説明

プロジェクト ページの作成中に、子要素が親要素の透明度を継承するという問題に遭遇しました。多くのドキ...

Vue3 コンパイルプロセス - ソースコード分析

序文: Vue3 がリリースされてからかなり経ちますが、最近、会社のプロジェクトでVue3 + Ty...

Vue要素はテーブルの追加、削除、データの変更を実装します

この記事では、テーブル内のデータを追加、削除、変更するためのvue要素の具体的なコードを参考までに共...