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の最適化の方向性について詳しく話しましょう

推薦する

MySQL 8.0.12 解凍バージョンのインストールチュートリアル

この記事では、MySQL 8.0.12解凍版のインストールチュートリアルを参考までに紹介します。具体...

MySQLでユーザーを作成し、ユーザーに権限を付与する方法の詳細なチュートリアル

目次ユーザー管理新しいユーザーを作成するユーザー名の変更ユーザーのパスワードを設定するルートパスワー...

Docker Compose のインストールと使用手順

目次1. Docker Compose とは何ですか? 2. Docker Composeのインスト...

OneProxy に基づいて MySQL の読み取り/書き込み分離と負荷分散を実装する

導入パート1: 冒頭に書いたOneProxy は、民間ソフトウェアによって完全に独立して開発された分...

Nginx リバースプロキシの例の詳細な説明

1. リバースプロキシの例1 1. 効果を達成する(1)ブラウザを開き、www.123.comと入力...

CN2、GIA、CIA、BGP、IPLC はどういう意味ですか?

CN2ラインとは何ですか? CN2 は、China Telecom Next Carrier Ne...

WeChatアプレットAmapマルチポイントルート計画プロセス例の詳細な説明

電話Amap API を呼び出す方法は? Amap が https://lbs.amap.com/a...

3分でUbuntu 16.04を初期化し、Java、Maven、Docker環境をデプロイする

Fast-Linux プロジェクト アドレス: https://gitee.com/uitc/Fas...

mysql5.6 以前のデータベースで json をクエリする方法

MySQLにデータを保存するとき、乱雑であまり使用されないデータがJSONフィールドに投げ込まれるこ...

トランザクションとロックを表示するための MySQL の一般的なステートメント

データベース内のトランザクションとロックを表示するための一般的なステートメントトランザクションの待機...

Typescript での infer キーワードの使用に関する詳細な理解

目次推測する事例:理解を深める参照する後で忘れないように、キーワード infer をメモしておきます...

Windows での MySQL 8.0.15 の詳細なインストールと使用のチュートリアル

この記事では、MySQL 8.0.15の詳細なインストールと使用方法のチュートリアルを参考までに紹介...

Reactはいくつかの方法でパラメータを渡します

目次親コンポーネントと子コンポーネント間でパラメータを渡すルーティングパラメータステータスの改善コン...

テキストスクロール後の自動停止効果の例

効果は非常にシンプルで、次のコードを自分のページにコピーして実行するだけです。コードをコピーコードは...

Vue3でelement-plusを使用する方法の詳細な説明

目次1. インストール2. main.jsにインポートする3. 使用Vue3がリリースされてからしば...