JavaScript のプロトタイプとは正確には何ですか_javascript のヒント
JavaScript もオブジェクト指向言語ですが、クラスベースの言語ではなく、プロトタイプベースの言語です。 JavaScript では、クラスとオブジェクトの間に大きな違いはないようです。
プロトタイプとは:
関数で定義されたオブジェクトにはプロトタイプ属性があり、プロトタイプ属性はプロトタイプ・オブジェクトを指します。プロトタイプ属性とプロトタイプ・オブジェクトは別のものであるため、その違いに注意してください。プロトタイプ オブジェクトには別のコンストラクター属性があり、このコンストラクター属性もコンストラクター オブジェクトを指しており、このコンストラクター オブジェクトはまさに関数そのものです。 とても複雑ではありませんか?擬似コードで表現すると次のようになります:
var function{ prototype:prototype{ constructor:constructor == function } }
まだ理解できませんか?写真を見てください:
プロトタイプの役割:
このプロトタイプは具体的に何をするのでしょうか?以下の例を見てください:
function jb51(){ } jb51.prototype.name = "a"; var test = new jb51(); alert(test.name)//"a";
奇妙なことに、明らかに name 属性がテスト用に設定されていないのに、なぜ値があるのでしょうか?
これはプロトタイプの貢献です。uw3c のプロトタイプ属性内の name オブジェクトは、新しいコンストラクターによって uw3c が作成された後、オブジェクト test の属性に継承されます。次に読む:
var name = "js"; function jb51(name){ alert(this.name);//"css" } jb51.prototype.name = "css"; var test = new jb51(); test()
alert の値が「js」ではないのはなぜですか?プロセスは大まかに次のとおりです。
var test={}; uw3c.call(test);
最初のステップは、新しいオブジェクト (テスト) を作成することです。
2 番目のステップは、オブジェクト (テスト) の組み込みプロトタイプ オブジェクトを、コンストラクター (つまり、uw3c) のプロトタイプ属性によって参照されるプロトタイプ オブジェクトに設定することです。
3 番目のステップは、オブジェクト (test) をパラメータとして使用してコンストラクター (つまり、uw3c) を呼び出し、メンバー設定などの初期化作業を完了することです。
2 番目のステップで登場した新しい用語は、組み込みプロトタイプ オブジェクトです。この新しい用語は、プロトタイプ オブジェクトと同じものではないことに注意してください。これを inobj と呼びます。inobj は、関数 uw3c のプロトタイプ オブジェクト。 uw3c のプロトタイプ オブジェクトに表示されるプロパティや関数は、テスト オブジェクトで直接使用できます。これが JS のプロトタイプの継承です。
通常、次のようなオブジェクトを作成します:
function person(name){ this.sayHi = function(){ alert('hi ' + this.name); } this.name = name; } var p = new person("dan"); p.sayHi();
上では、 new キーワードを使用して、オブジェクトを通じてオブジェクト インスタンスを作成します (関数も特別なオブジェクトです)。
クラスベースの言語では、通常、属性またはフィールドはクラス内で事前に定義されますが、JavaScript では、オブジェクトの作成後にフィールドをクラスに追加できます。
function animal(){} var cat = new animal(); cat.color = "green";
上記では、color フィールドは現在の cat インスタンスにのみ属します。
後で追加したフィールドについて、animal のすべてのインスタンスにフィールドを持たせたい場合はどうすればよいでしょうか?
--使用Prototype function animal(){} animal.prototype.color= "green"; var cat = new animal(); var dog = new animal(); console.log(cat.color);//green console.log(dog.color);//green
プロトタイプを通じてフィールドを追加できるだけでなく、メソッドも追加できます。
function animal(){} animal.prototype.color= "green"; var cat = new animal(); var dog = new animal(); console.log(cat.color);//green console.log(dog.color);//green animal.prototype.run = funciton(){ console.log("run"); } dog.run();
prototype 属性を使用すると、オブジェクトの作成後にその動作を変更することもできることがわかりました。
たとえば、配列と呼ばれる特別なオブジェクトにメソッドを追加できます。
Array.prototype.remove = function(elem){ var index = this.indexof(elem); if(index >= 0){ this.splice(index, 1); } } var arr = [1, 2, 3] ; arr.remove(2);
プロトタイプを通じてオブジェクトのプロパティやメソッドを定義するだけでなく、オブジェクトのコンストラクターを通じてクラスのプロパティやメソッドを定義することもできます。
function animal(){ this.color = "green"; this.run = function(){ console.log("run"); } } var mouse = new animal(); mouse.run();
上記のアプローチにより、すべての動物インスタンスがすべてのフィールドとメソッドを共有できるようになります。もう 1 つの利点は、コンストラクターでクラスのローカル変数を使用できることです。
function animal(){ var runAlready = false; this.color = "green"; this.run = funciton(){ if(!runAlreadh){ console.log("start running"); } else { console.log("already running") } } }
実際、より実用的なアプローチは、プロトタイプと組み合わせたコンストラクターを通じてクラスのフィールドと動作を定義することです。
function animal(){ var runAlready = false; this.run = function(){ if(!runAlready){ console.log('i am running'); } else { console.log("i am already running"); } } } animal.prototype.color = ''; animal.prototype.hide = funciton(){ console.log(""); } var horse = new animal(); horse.run(); horse.hide();
プロトタイプを使用すると、オブジェクトの作成後にオブジェクトまたはクラスの動作を変更できます。プロトタイプ属性を通じて追加されたこれらのフィールドまたはメソッドは、すべてのオブジェクト インスタンスで共有されます。

ホット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)

ホットトピック











JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

このチュートリアルでは、カスタムGoogle検索APIをブログまたはWebサイトに統合する方法を示し、標準のWordPressテーマ検索関数よりも洗練された検索エクスペリエンスを提供します。 驚くほど簡単です!検索をyに制限することができます

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

この記事シリーズは、2017年半ばに最新の情報と新鮮な例で書き直されました。 このJSONの例では、JSON形式を使用してファイルに単純な値を保存する方法について説明します。 キー価値ペア表記を使用して、あらゆる種類を保存できます

楽なWebページレイアウトのためにjQueryを活用する:8本質的なプラグイン jQueryは、Webページのレイアウトを大幅に簡素化します。 この記事では、プロセスを合理化する8つの強力なjQueryプラグイン、特に手動のウェブサイトの作成に役立ちます

コアポイント これは通常、メソッドを「所有」するオブジェクトを指しますが、関数がどのように呼び出されるかに依存します。 現在のオブジェクトがない場合、これはグローバルオブジェクトを指します。 Webブラウザでは、ウィンドウで表されます。 関数を呼び出すと、これはグローバルオブジェクトを維持しますが、オブジェクトコンストラクターまたはそのメソッドを呼び出すとき、これはオブジェクトのインスタンスを指します。 call()、apply()、bind()などのメソッドを使用して、このコンテキストを変更できます。これらのメソッドは、与えられたこの値とパラメーターを使用して関数を呼び出します。 JavaScriptは優れたプログラミング言語です。数年前、この文はそうでした

jQueryは素晴らしいJavaScriptフレームワークです。ただし、他のライブラリと同様に、何が起こっているのかを発見するためにフードの下に入る必要がある場合があります。おそらく、バグをトレースしているか、jQueryが特定のUIをどのように達成するかに興味があるからです

この投稿は、Android、BlackBerry、およびiPhoneアプリ開発用の有用なチートシート、リファレンスガイド、クイックレシピ、コードスニペットをコンパイルします。 開発者がいないべきではありません! タッチジェスチャーリファレンスガイド(PDF) Desigの貴重なリソース
