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 {
🎜>

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。

Quartzタイマーを使用してタスクをスケジュールする場合、Quartzでタスク通知を事前に送信する方法、タスクの実行時間はCron式によって設定されます。今...


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

Dreamweaver Mac版
ビジュアル Web 開発ツール

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