JavaScriptの関数呼び出し4つのメソッドを詳しく解説_JavaScriptスキル
JavaScript では、関数は JavaScript のデータ型であり、C# や他の記述言語のようにモジュールとして使用されるだけではありません。関数の呼び出しには、関数呼び出し形式、メソッド呼び出し形式、コンストラクター形式、および適用形式の 4 つの呼び出しモードがあります。ここでのすべての呼び出しモードの中で、主な違いはキーワード this の意味にあります。これらの呼び出し形式を以下に紹介します。
この記事の主な内容:
1. 関数の 4 つの呼び出し形式を分析する
2. 関数内での意味を明確にする
3. 関数を呼び出すためのコンテキストの使用方法を学習する
🎜>
1. 関数呼び出しフォーム
関数呼び出し形式は、最も一般的な形式であり、最もよく理解されている形式です。いわゆる関数形式とは、通常、関数を宣言して直接呼び出すことを意味します。例:function func() {
alert("Hello World");
}
func();
var を呼び出します。 func = function() {
alert("Hello,programmer");
};
func();
関数呼び出しは、通常学習していることと同じように、非常に簡単であることがわかります。ここで重要なのは、関数呼び出しモードでは、関数内の this キーワードがグローバル オブジェクト (つまり、ウィンドウ オブジェクト) を参照していることです。ブラウザ。例:
alert(this);
};
func();
2. メソッド呼び出しモード
関数呼び出しモードは非常にシンプルで、最も基本的な呼び出し方法です。ただし、同じ関数ですが、オブジェクトのメンバーに割り当てた後の動作は異なります。関数をオブジェクトのメンバーに割り当てると、その関数は関数と呼ばれなくなり、メソッドと呼ばれるようになります。例:var func = function() {
alert("Am I a function?");
};
// オブジェクトに割り当てます
var o = {};
o. fn = func; // ここに括弧を追加しないように注意してください
//
o.fn(); この時点では、o.fn は関数ではありません。 。実際、fn のメソッド本体は func のメソッド本体とまったく同じですが、ここに微妙な違いがあります。以下のコードを見てください:
//関数本体を変更します
var func = function() {alert(this);
};
var o = {};
o.fn = func;
//
alert(o.fn === func) を比較します。
//
func() を呼び出します。
o.fn();
ここを実行します結果として、両方の関数は同一であるため、出力される結果は true になります。ただし、2 つの関数の呼び出しは異なるため、func の呼び出しでは [object Window] が出力されますが、o.fn の出力結果は [object Object] となります。
3. コンストラクター呼び出しモード
これは関数でもあり、純粋関数モードではウィンドウを指しますが、オブジェクト メソッド モードでは現在のオブジェクトを指します。これら 2 つのケースに加えて、JavaScript の関数もコンストラクターになる可能性があります。関数をコンストラクターとして使用する構文では、関数呼び出しの前に new キーワードを置きます。たとえば、コード:
// コンストラクターを定義します
var person = function() {
this.name = "プログラマー";
this.sayHello = function() {
alert( "Hello 、これは" this.name);
};
};
// コンストラクターを呼び出してオブジェクトを作成します
var p = new Person();
// オブジェクトを使用します
p.sayHello();
上記のケースでは、まずコンストラクター person を作成し、次にそのコンストラクターを使用してオブジェクト p を作成します。ここでは新しい構文が使用されています。次に、そのオブジェクトを使用して、sayHello() メソッドを呼び出します。このケースでは、コンストラクターを使用してオブジェクトを作成します。ケースからわかるように、これはオブジェクト自体を指します。上記の単純な使用に加えて、コンストラクターとしての関数にいくつかの変更があります。つまり、
1. オブジェクトで使用する必要があるすべての属性は、
によってガイドされる必要があります。2. 関数の return 文の意味が書き換えられ、オブジェクト以外が返された場合はこれが返されます。
コンストラクター内のthis
これの意味を知るには、オブジェクトの作成プロセスを分析する必要があります。たとえば、次のコード:
var Person = function() {
This.name = "Programmer";
};
var p = new Person();
ここで関数 Person を最初に定義します。実行全体:
1. プログラムがこの文を実行するとき、関数本体は実行されないため、JavaScript インタプリタはこの関数の内容を知りません。
2. 次に、new キーワードを実行してオブジェクトを作成します。インタプリタはメモリを割り当て、オブジェクトへの参照を取得し、新しいオブジェクトへの参照を関数に渡します。
3. 次に関数を実行し、渡されたオブジェクト参照を this に渡します。つまり、コンストラクターでは、これは new によって作成されたばかりのオブジェクトです。
4. 次に、これにメンバーを追加します。つまり、オブジェクトにメンバーを追加します。
5. 最後に関数は終了し、これを返し、左側の変数に渡します。
コンストラクターの実行を分析した後、コンストラクター内の this が現在のオブジェクトであることがわかります。
コンストラクターのreturn
コンストラクター内の return の意味が変更されました。まず、コンストラクター内でオブジェクトが返された場合、元の意味が保持されます。数値、ブール値、文字列などの非オブジェクトが返される場合、return ステートメントがない場合は、これも返されます。次のコードを参照してください:
var ctr = function() {
this .name = "趙暁虎";
return {
name:"牛梁梁"
};
};
//オブジェクトを作成
var p = new ctr();
//アクセス名属性
alert(p.name);
var ctr = function() {
This.name = " Zhao Xiaohu";
Return "Niu Liangliang";
};
// オブジェクトを作成
var p = new ctr();
//
alert(p) を使用します。
alert(p. name);
4. 通話モードを適用します
上記の 3 つの呼び出しモードに加えて、オブジェクトとしての関数には、使用できる適用メソッドと呼び出しメソッドもあります。これが 4 番目の呼び出しモードであり、私はこれを適用モードと呼んでいます。まずapplyモードを紹介します まずapplyモードは関数やメソッドのように使うことができる柔軟な使い方と言えます。まず、構文を見てみましょう: 関数名.apply(オブジェクト, パラメータ配列);
ここでの構文はかなりわかりにくいので、例を使って説明しましょう:
1. 2 つの新しい js ファイル、つまり「js1.js」と「js2.js」を作成します。
2. コードを追加します
// js1.js ファイル内
var func1 = function() {
this.name = "Programmer";
};
func1.apply(null); 🎜>アラート(名前);
// js2.js ファイル
var func2 = function() {
this.name = "プログラマ";
};
var o = {};
func2. (o);
alert(o.name);
ここでのパラメータはメソッド自体のパラメータですが、たとえば、次のコードのように格納する必要があります。 code
// メソッドを定義します
var func = function(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;};
//オブジェクトを作成します
var o = {};
//オブジェクトにメンバーを追加します
//パターンを適用します
var p1 = func.apply(o, ["趙暁胡", 19, "男性"]);
// 通話モード
var p2 = func.call(o, "趙暁胡", 19, "男性");
上記のコードでは、適用モードと呼び出しモードの結果は同じです。
実際、apply モードと call モードを使用すると、この意味を任意に制御でき、関数 js のデザイン モードで広く使用されています。簡単にまとめると、js には関数呼び出しの 4 つのモードがあります。つまり、function、method、constructor、apply です。これらのモードでの this の意味は、関数では、これはグローバル オブジェクト ウィンドウであり、メソッドでは、これです。コンストラクタでは現在のオブジェクトを参照し、適用モードでは任意に指定できます。適用パターンで null が使用されている場合は関数パターン、オブジェクトが使用されている場合はメソッド パターンです。
この記事を事例で終わりにしましょう。ケースの説明: ID が dv の div があり、その上にマウスを移動すると、高さが 2 倍に増加します。マウスを離れると、その高さが以下に直接ロードされます。 🎜>
コードをコピー
コードは次のとおりです:
var dv = document.getElementById("dv");
var height = parseInt(dv.style.height || dv.offsetHeight);
var intervalId;
dv.onmouseover = function() {
// 実行中のアニメーションを停止
clearInterval(intervalId);
// 目標の高さを取得
var toHeight = height * 2;
// 取得現在のオブジェクト
var that = this;
// タイマーを開始し、ゆっくりと変更します
intervalId = setInterval(function() {
// 現在の高さを取得します
var height = parseInt( dv.style.height || dv.offsetHeight);
それぞれ変更する必要があるステップ サイズを記録します。時間ステップ サイズが 0
if( h > 0 ) {
) "px";
} else {
// 原理は前と同じ
clearInterval(intervalId);
var toHeight = height;
var that = this;
intervalId = setInterval(function() {
var height = parseInt(dv .style.height || dv.offsetHeight);
var h = Math.ceil(Math.abs(height - toHeight) / 10);
if( h > 0 ) {
that.style .height = (height - h) "px";
} else {
🎜>

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











Go 言語は、クロージャとリフレクションという 2 つの動的関数作成テクノロジを提供します。クロージャを使用すると、クロージャ スコープ内の変数にアクセスでき、リフレクションでは FuncOf 関数を使用して新しい関数を作成できます。これらのテクノロジーは、HTTP ルーターのカスタマイズ、高度にカスタマイズ可能なシステムの実装、プラグイン可能なコンポーネントの構築に役立ちます。

C++ 関数の名前付けでは、読みやすさを向上させ、エラーを減らし、リファクタリングを容易にするために、パラメーターの順序を考慮することが重要です。一般的なパラメータの順序規則には、アクション-オブジェクト、オブジェクト-アクション、意味論的な意味、および標準ライブラリへの準拠が含まれます。最適な順序は、関数の目的、パラメーターの種類、潜在的な混乱、および言語規約によって異なります。

効率的で保守しやすい Java 関数を作成するための鍵は、シンプルに保つことです。意味のある名前を付けてください。特殊な状況に対処します。適切な可視性を使用してください。

1. SUM 関数は、列またはセルのグループ内の数値を合計するために使用されます (例: =SUM(A1:J10))。 2. AVERAGE 関数は、列またはセルのグループ内の数値の平均を計算するために使用されます (例: =AVERAGE(A1:A10))。 3. COUNT 関数。列またはセルのグループ内の数値またはテキストの数をカウントするために使用されます。例: =COUNT(A1:A10)。 4. IF 関数。指定された条件に基づいて論理的な判断を行い、結果を返すために使用されます。対応する結果。

C++ 関数のデフォルト パラメーターの利点には、呼び出しの簡素化、可読性の向上、エラーの回避などがあります。欠点は、柔軟性が限られていることと、名前の制限があることです。可変引数パラメーターの利点には、無制限の柔軟性と動的バインディングが含まれます。欠点としては、複雑さの増大、暗黙的な型変換、デバッグの難しさなどが挙げられます。

C++ で参照型を返す関数の利点は次のとおりです。 パフォーマンスの向上: 参照による受け渡しによりオブジェクトのコピーが回避され、メモリと時間が節約されます。直接変更: 呼び出し元は、返された参照オブジェクトを再割り当てせずに直接変更できます。コードの簡素化: 参照渡しによりコードが簡素化され、追加の代入操作は必要ありません。

カスタム PHP 関数と定義済み関数の違いは次のとおりです。 スコープ: カスタム関数はその定義のスコープに限定されますが、事前定義関数はスクリプト全体からアクセスできます。定義方法: カスタム関数は function キーワードを使用して定義されますが、事前定義関数は PHP カーネルによって定義されます。パラメータの受け渡し: カスタム関数はパラメータを受け取りますが、事前定義された関数はパラメータを必要としない場合があります。拡張性: カスタム関数は必要に応じて作成できますが、事前定義された関数は組み込みで変更できません。

C++ の例外処理は、特定のエラー メッセージ、コンテキスト情報を提供し、エラーの種類に基づいてカスタム アクションを実行するカスタム例外クラスを通じて強化できます。 std::Exception から継承した例外クラスを定義して、特定のエラー情報を提供します。カスタム例外をスローするには、throw キーワードを使用します。 try-catch ブロックでdynamic_castを使用して、キャッチされた例外をカスタム例外タイプに変換します。実際の場合、open_file 関数は FileNotFoundException 例外をスローします。例外をキャッチして処理すると、より具体的なエラー メッセージが表示されます。
