はじめに
これはさまざまなオブジェクト プログラミングで非常に重要な役割を果たし、主に呼び出し元のオブジェクトを指すために使用されます。ただし、JavaScript では、特に実行コンテキストが異なると、このパフォーマンスが大きく異なります。
前の記事から、これは実行コンテキストの属性でもあるため、実行コンテキストから切り離せない運命にあることがわかりました。
activeExecutionContext = {
VO: { ... },
this: thisValue};
JavaScript では、this の値は呼び出しモードによって異なります。呼び出しモードには、メソッド呼び出しモード、関数呼び出しモード、コンストラクター呼び出しモード、適用呼び出しモードの 4 つがあります。
呼び出しパターン
メソッド呼び出しパターン
関数がオブジェクトのプロパティとして保存される場合、それをメソッドと呼びます。メソッドが呼び出されるとき、this はオブジェクトにバインドされます。つまり、メソッド呼び出しパターン内の this は呼び出し元のオブジェクトを指します。これは非常に理解しやすいです。あなたは私の方法であり、あなたは私のものであり、もちろんあなたのこれは私を指します。
var myObject = {
value : 0,
インクリメント : function(inc) {
this.value = typeof inc === "number" ? inc : 1;
} }
}
myObject.increment();
console .log(myObject.value); //出力: 1
myObject.increment(3);
console.log(myObject.value); //出力: 4
これを通じて自分が属しているオブジェクトにアクセスできるため、これを通じてオブジェクト内のプロパティやメソッドを呼び出したり、変更したりできます。前の記事からわかるように、this は、実行コンテキストの属性のメンバーとして、コンテキストの作成時に作成する必要があります。このオブジェクトと this のバインドはすべて、呼び出し時に行われます。遅延バインディング」。遅延バインディングにより、これを高度に再利用できます。
function showValue(){
console .log( this.value);
}
var a = { value : "a"};
var b = { value : "b"};
a.showValue = showValue;
b .showValue = showValue;
a.showValue(); //「a」を出力
b.showValue(); //「b」を出力
上記の例の関数 showValue は遅延バインディングに属します。
関数呼び出しモード
オブジェクトのメソッドとして関数を呼び出さない場合、関数呼び出しとなります。関数呼び出しモードでは、これはグローバル オブジェクトにバインドされます。 (これは言語設計上のミスです)
myObject.double = function(){
var that = this; //Solution
var helper = function(){
console.log(that, ": ", that.value) //出力オブジェクト {value: 4, increment: function , double : function} ": " 4
console.log(this, ": ", this.value) //出力ウィンドウ {top: Window, window: Window…} ": "
helper() ; //
}
を関数形式で呼び出します
通常の考え方によれば、4 行目の出力のように、これは関数が属するオブジェクトを指すはずですが、言語設計の問題により、これはグローバル オブジェクトを指します。これにより、これはさらに神秘的で予測不可能になります。しかし、開発者としては、この状況は絶対に見たくないものです。カードをプレイすることは常識ではありません。上の例では、これを解決するために使用されています。このようにヘルパーメソッド内で呼び出すとこのように使えるので簡単で便利です。関数呼び出しモードについては、なぜこのような動作になるのかについては、参照型を解析する際に詳しく説明します。
コンストラクター呼び出しモード
JavaScript はプロトタイプの継承に基づいているため、設計者は new を渡し、コンストラクターがオブジェクトを作成して、オブジェクト指向プログラミングを実現できるようにしたいと考えています。これは良いアイデアではないようですし、犬の代わりに虎を描くのは少し恥ずかしいです。 1つは、学ぶことは不可能だが、学ぶ必要はないということです。 JavaScript のプロトタイプ継承メカニズムはすでに非常に強力であり、オブジェクト指向に必要な継承ポリモーフィズムを満たすのに十分です。
早速、コンストラクターの呼び出しパターンについて説明しましょう。コンストラクターの呼び出しパターンは非常に単純で、関数をコンストラクターとして使用し、これを使用して公開するプロパティとメソッドを導入します。以下の通り
function person(name, age){
this .name = name;
this.age = age;
this.say = function(){
console.log("name : %s, age : %n", this.name 、この年齢);
}
}
var p1 = new Person("jink", 24);
p1.say() //出力名:ジンク、年齢:24
var p2 = new Person("Zhang San", 33);
p2.say();//出力名: Zhang San、年齢: 33
上記の例から、これが new とコンストラクターを通じて作成されたオブジェクトを指していることが明確にわかります。なぜこのようなことが起こっているのでしょうか?これは、JavaScript で new を介してコンストラクターが呼び出される場合、new 演算子が "person" 関数の内部 [[Construct]] メソッドを呼び出し、オブジェクトの作成後に内部の [[Call]] メソッドが呼び出されるからです。と呼ばれた。 まったく同じ関数「person」は、新しく作成されたオブジェクトに this の値を設定します。
apply 呼び出しモード
JavaScript のすべての関数が作成されると、apply と call の 2 つのメソッドが存在します。これら 2 つの方法の具体的な使い方については、ここでは詳しく説明しません。知らない学生は、Baidu で検索することができます。 2 つの方法でこれを手動で設定できます。これを作成中に変更することはできませんが、作成前に手動で設定する場合は別の問題になります。この設定は驚くべきもので、車を海で航行させたり、アフリカ象をジャガーのようにスピードを上げたり、プログラマーをピアニストのように演奏させたりするのと同じように、オブジェクトに任意のメソッドを呼び出すことができます。はは、想像力は常に美しいですが、呼び出した後にその機能が実現できるかどうかは別の問題です。
var projecter = {
name : "プログラマ ",
hand : "柔軟な手",
プログラム : function(){
console.log(this.name "" this.hand " でコードを記述します。");
}
}
var pianist = {
name : "ピアニスト",
hand : "柔軟な手",
play : function(){
console.log(this.name これを「使用」します。 hand "美しい音楽をかけてください。");
}
}
var player = {
name : "アスリート",
foot : "強い脚",
run : function(){
console.log(this.name これを「使用」します。足 "フィールドでレースします。");
}
}
//ルールに従います
programmer.programme() //プログラマーは柔軟な手でコードを書きます。
pianist.play(); //ピアニストは柔軟な手を使って美しい音楽を演奏します。
player.run(); //アスリートは強い脚でフィールドを走ります。
//気まぐれ
pianist.play.apply(programmer); //プログラマーは柔軟な手を使って美しい音楽を演奏します。
player.run.apply(programmer); //プログラマはフィールド上での実行に未定義を使用します。運動不足で脚力がありません
上記は興味深いようです。 apply の最初のパラメータは、実行メソッドの this ポインタです。このように、他の人のメソッドを借りて、プライベートかつ秘密裏に使用することができ、非常に便利です。このタイプの手法は、一部のフレームワークでよく使用されます。
まとめ
これを読んだ後、誰もがさまざまな状況でのこの判断をある程度理解できると思います。本来は次の章で参照オブジェクトについて説明する予定でしたが、メソッド呼び出しモードと関数呼び出しモードでこの値の原理を説明する予定でしたが、長くなりそうなので別章にすることにしました。参照オブジェクトの概念を分析します。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

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

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

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

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