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の日付と時刻関数を扱う記事

目次序文1. 現在の時刻を取得する1.1 現在の日付と時刻を返す1.2 現在の日付を取得する1.3 ...

Mysql の 2 つのテーブル間の結合クエリの 4 つの状況の概要

一般的に言えば、より完全な結果を得るためには、2 つ以上のテーブルから結果を取得する必要があります。...

大規模なウェブサイトアーキテクチャを設計・構築する際に考慮すべき10の課題

ここでは、PHP、JSP、または .NET 環境については説明しません。アーキテクチャの観点から問題...

背景位置パーセンテージ原則の詳細な説明

今日、誰かがコードを調整するのを手伝っていたとき、次のようなスタイルを見つけました。 背景位置: 5...

Docker を使用した nGrinder パフォーマンス テスト プラットフォームの導入プロセスの分析

nGrinderとは何ですか? nGrinder は、スクリプトの作成、テストの実行、監視、結果レポ...

Ubuntu ベースのディストリビューションに Microsoft TrueType フォントをインストールするチュートリアル

Linux 上の LibreOffice で Microsoft ドキュメントを開くと、フォントが少...

JS オブジェクト配列の重複排除のための 3 つの方法の例と比較

目次1. 重複排除前後のデータの比較2. 使い方1. フィルターとマップを使用する2. 削減を使用す...

JavaScript におけるブラウザ互換性の問題について簡単に説明します

ブラウザの互換性は、実際の開発では見落とされがちな最も重要な部分です。古いバージョンのブラウザの互換...

WeChatアプレットを少なく使う方法(最適な方法)

序文私は less/sass を書くことに慣れていますが、小さなプログラムを開発するときには、まだ ...

React NativeのScrollViewプルダウンリフレッシュ効果

この記事では、React Native ScrollViewのプルダウンリフレッシュ効果の具体的なコ...

CentOS8 で MySQL 8.0 をインストールしてデプロイする方法

MySQL 8 の公式バージョン 8.0.11 がリリースされました。公式発表によると、MySQL ...

Vue でのカスタムディレクティブの基本的な使用方法

目次序文文章1. グローバル登録2. 部分登録3. フック機能とパラメータ設定4. 柔軟な使い方(1...

Linux でシステム ディスクを初期化した後にデータ ディスクを再マウントする方法

Linuxインスタンスでシステムディスクを初期化した後、データディスクを再マウントするLinux イ...

CSS を使用してサブ要素に応じて異なるスタイルを記述する方法

達成すべき効果: 必要なもの1枚、2枚、3枚とスタイルが異なります。子要素の判定はjsで完結できます...

Dockerを使用してGitlabを素早くデプロイする方法

1. GitLabイメージをダウンロードする docker pull gitlab/gitlab-c...