ホームページ ウェブフロントエンド jsチュートリアル JS関数のオーバーロードの解決策_JavaScriptスキル

JS関数のオーバーロードの解決策_JavaScriptスキル

May 16, 2016 pm 04:48 PM
javascript js 関数のオーバーロード

オブジェクト指向プログラミングでは、多くの言語が関数のオーバーロードをサポートしており、関数によって渡されるパラメーターのさまざまな数と型に基づいてさまざまな操作を実行できます。ただし、JS はそれをサポートしていないため、追加の操作が必要です。小さな行動。

JS の関数実行コンテキストには、引数という興味深い変数があります。これは、関数定義でそれほど多くの形式的な定義がされていない場合でも、関数の実行時に渡されるすべてのパラメーターを配列の形式で格納します。パラメータ。もう 1 つの特別な特徴は、Array 型と比較して、引数変数には長さ属性が 1 つしかないことです (push、pop など)。これは単なる「疑似配列」です。長さ属性と格納配列は、配列アクセサー [] を使用してアクセスできますが、読み取り専用で書き込み可能ではありません。

1. さまざまな数のパラメータに対するオーバーロード
ここで明らかなように、引数関数の長さ属性を使用して判断するだけです。


コードをコピー コードは次のとおりです:



2. さまざまな型のパラメーターのオーバーロード JS のような動的に型付けされた言語の場合、変数宣言の恣意的な性質により、開発者の頭の中では厳密な変数型の重要性が薄れます (追記:これも ECMA システムに基づいており、AS は変数宣言の必須タイプを導入しています)。実際には、この変数タイプの自動変換によって多くの予期しないバグが発生します。実際、JS は変数の型を厳密に検出するための非常に正確なメソッドを提供します。より一般的なのは typeof メソッドとコンストラクター属性です。

1. typeof 変数は変数の型を返します

コードをコピー コードは次のとおりです。
temp = "say";
temp = 1; //数値
temp = unknown; //オブジェクト
temp = {}; /object
temp = true; //boolean
temp = function (){} //function
alert(typeof temp);
上記のテストにより、null、Object、Array がオブジェクト型を返すことがわかり、次のメソッドでこの問題を解決できます。

2.Constructor 属性で変数の型を検出
JS のすべてのオブジェクトにはコンストラクター属性があり、このオブジェクトを構築する関数を参照するために使用されます。この参照を判断することで変数の型を検出できます。

コードをコピーします

コードは次のとおりです。temp = "say" ; temp.constructor ==String; //true temp= {}; temp.constructor == オブジェクト;//true
temp= [];/ /true



上記のテストにより、配列型変数とオブジェクト型変数を簡単に区別できます。カスタム オブジェクトでテストを実行して、何が起こるかを確認してみましょう。



コードをコピー

コードは次のとおりです:



これは、コンストラクター属性がカスタム オブジェクトにも適用できることを示しています。

上記 2 つのメソッドの適用を明確にした後、JS 関数のオーバーロードのシミュレーションに戻りましょう。次の例はパラメーターの型に基づいたオーバーロードです。

コードをコピー

コードは次のとおりです:


関数 talk(msg){
var t = typeof msg;
if(t=="文字列"){
アラート("文字列です");
else if(t=="数値"){
alter("数値です")
}
}
talk(10); // 文字列です
talk("デモ") // それは数字です

パラメータの型と数値を厳密に検出する非常に賢い関数が付属しています:

コードをコピー コードは次のとおりです:
// に基づいて変数リストを厳密にチェックします。パラメータリスト
関数の型 strict(types, args ) {
//パラメータの数が型と一致することを確認します core
if (types.length != args.length ) {
//長さが一致しない場合、例外がスローされます
throw "引数の数が無効です。" types.length " が予期され、代わりに " args.length " を受け取りました。" 🎜> for ( var i = 0; i < args.length; i ) {
使用スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー‐‐‐‐ and‐ for ( var i = 0; i throw "引数の型が無効です。期待されるのは " " >}

//上記のメソッドの使用
function doFunction(id,name){
//パラメータの数と型を検出します
strict([Number,String],arguments); ..
}

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

推奨: 優れた JS オープンソースの顔検出および認識プロジェクト 推奨: 優れた JS オープンソースの顔検出および認識プロジェクト Apr 03, 2024 am 11:55 AM

顔の検出および認識テクノロジーは、すでに比較的成熟しており、広く使用されているテクノロジーです。現在、最も広く使用されているインターネット アプリケーション言語は JS ですが、Web フロントエンドでの顔検出と認識の実装には、バックエンドの顔認識と比較して利点と欠点があります。利点としては、ネットワーク インタラクションの削減とリアルタイム認識により、ユーザーの待ち時間が大幅に短縮され、ユーザー エクスペリエンスが向上することが挙げられます。欠点としては、モデル サイズによって制限されるため、精度も制限されることが挙げられます。 js を使用して Web 上に顔検出を実装するにはどうすればよいですか? Web 上で顔認識を実装するには、JavaScript、HTML、CSS、WebRTC など、関連するプログラミング言語とテクノロジに精通している必要があります。同時に、関連するコンピューター ビジョンと人工知能テクノロジーを習得する必要もあります。 Web 側の設計により、次の点に注意してください。

C++ で関数のオーバーロードと書き換えを区別する方法 C++ で関数のオーバーロードと書き換えを区別する方法 Apr 19, 2024 pm 04:21 PM

関数のオーバーロードでは、同じ名前で異なるシグネチャを持つ関数をクラス内で使用できますが、関数のオーバーライドは、基本クラス内の同じシグネチャを持つ関数をオーバーライドするときに派生クラスで発生し、異なる動作を提供します。

jsとvueの関係 jsとvueの関係 Mar 11, 2024 pm 05:21 PM

js と vue の関係: 1. Web 開発の基礎としての JS、2. フロントエンド フレームワークとしての Vue.js の台頭、3. JS と Vue の補完関係、4. JS と Vue の実用化ビュー。

PHP 関数のオーバーロードと書き換え PHP 関数のオーバーロードと書き換え Apr 26, 2024 pm 05:12 PM

PHP では関数のオーバーロードと書き換えがサポートされており、柔軟で再利用可能なコードを作成できます。関数のオーバーロード: 同じ名前でパラメーターが異なる関数を作成し、パラメーターの一致に基づいて最も適切な関数を呼び出すことができます。関数の書き換え: サブクラスが同じ名前の関数を定義し、親クラスのメソッドをオーバーライドできるようにします。サブクラスのメソッドが呼び出されると、親クラスのメソッドがオーバーライドされます。

golangで関数のオーバーロードを実装するにはどうすればよいですか? golangで関数のオーバーロードを実装するにはどうすればよいですか? Apr 29, 2024 pm 05:21 PM

Go 言語は従来の関数のオーバーロードをサポートしていませんが、次の方法で同様の効果を実現できます。 名前付き関数の使用: 異なるパラメーターまたは戻り値の型を持つ関数に一意の名前を作成する (Go1.18 以降) ジェネリックを使用して一意の名前を作成する。さまざまなタイプのパラメータ用の関数の単一バージョン。

C++ 関数のオーバーロードはコンストラクターとデストラクターに適用されますか? C++ 関数のオーバーロードはコンストラクターとデストラクターに適用されますか? Apr 14, 2024 am 09:03 AM

C++ コンストラクターはオーバーロードをサポートしますが、デストラクターはオーバーロードをサポートしません。コンストラクターはさまざまなパラメーター リストを持つことができますが、デストラクターは空のパラメーター リストのみを持つことができます。これは、入力パラメーターなしでクラス インスタンスを破棄するときに自動的に呼び出されるからです。

実際のプロジェクトにおける C++ 関数のオーバーロードの適用シナリオは何ですか? 実際のプロジェクトにおける C++ 関数のオーバーロードの適用シナリオは何ですか? Apr 26, 2024 pm 01:57 PM

関数のオーバーロードを使用すると、同じ名前の関数を C++ で異なる方法で定義したり、異なる型の引数を処理したり、異なる操作を実行したりすることができます。特定のアプリケーション シナリオには以下が含まれます。 さまざまなデータ型を処理してさまざまな関数を提供し、コードの可読性を向上させる

C++ 関数のオーバーロードに関する制限と考慮事項は何ですか? C++ 関数のオーバーロードに関する制限と考慮事項は何ですか? Apr 13, 2024 pm 01:09 PM

関数のオーバーロードに関する制限には、パラメーターの型と順序が異なっていなければならない (パラメーターの数が同じ場合)、およびデフォルトのパラメーターをオーバーロードの区別に使用できないことが含まれます。また、テンプレート関数と非テンプレート関数をオーバーロードすることはできません。また、テンプレート仕様が異なるテンプレート関数をオーバーロードすることもできます。関数のオーバーロードを過度に使用すると、可読性とデバッグに影響を与える可能性があることに注意してください。コンパイラは、最も具体的な関数から最も具体性の低い関数まで検索して競合を解決します。

See all articles