ホームページ > ウェブフロントエンド > フロントエンドQ&A > プロトタイプおよびプロトタイプチェーンの関連コンテンツの説明

プロトタイプおよびプロトタイプチェーンの関連コンテンツの説明

jacklove
リリース: 2018-06-11 22:30:35
オリジナル
2427 人が閲覧しました




ここで、プロトタイプは、システムに付属する属性を表します。これは、後で属性を取得するときに使用される属性 Lastname を持つように Person の祖先が設定されていることを意味します。 person と person1 の属性値を継承します



小さな例は、継承関係を示しています

プロトタイプは、毎回作成するのではなく、一部のオブジェクトに共通のものを一度だけ書き込むことができます




さらに、プロトタイプをカプセル化することもでき、その方が優れています




前の例のコンストラクターは、システムに付属するプロパティ ( と呼ばれます) です。これはプロトタイプから継承されており、その内容はコンストラクターです。もう 1 つの属性は、システム独自の属性です。の _ はプロトタイプの内容です (2 つの __ は暗黙の命名規則です)

一般に開発中、同僚にパラメータにアクセスしたり変更したくない場合は、次のようにパラメータに名前を付けたくなります。 js private には絶対値はありません



これは、ff が person.prototype で値にアクセスできるように __proto__ を変更する例です




こちらこの例は


のようなものであるため、Person.name へのアクセスは引き続き Sunny 状態になります。プロトタイプ全体の構造は変更されていますが、Cherry への 2 回目の変更前は


です。 new、this {}内の値はpersonに返され、cherryに変更されても影響を受けないため、このプレッシャーを考慮して実行順序を考慮する必要があります。

しかし、関数ステートメントの順序を変更すると、

実行順序が変更されたため、person.name はチェリーになります

しかし、次のように変更すると、変更は成功します

プロトタイプチェーン


これはプロトタイプノードを介してリンクされたプロトタイプチェーンです。この場合、息子は姓にアクセスでき、実際にはGrandにプロトタイプがあります。 is Grand.prototype=object オブジェクトはすべてのプロトタイプチェーンの終端です







new は人に属するため、これは人に返されます。

person.__proto__は、person.prototypeにリンクされているため、変更されません(つまり、person.prototypeは直接変更する以外に変更できません)





person は、sayName



Object.create (プロトタイプ) に直接アクセスできません。


この場合プロトタイプには直接アクセスできますが、age の内部データにはアクセスできません


そして、

には次のようにアクセスできます:




以前の格言があります:

ほとんどのオブジェクトは最終的に Object.prototype を継承します

しかし、次の例外があるため、すべてのオブジェクトがそれを継承するわけではありません。ケース:


obj __proto__ がありません

__proto__ を手動で追加する場合:

でも、これなら


obj.name が見つかりません。このデータにアクセスする唯一の方法は:


/************************************************* ************************************************* *********/

拡張子:

toString() メソッド:


toString() メソッドは Object.prototype に組み込まれているため、ほとんどのオブジェクトがこのメソッドを持ちます (未定義と null を除く)

これら 2 つは、次のプロトタイプを継承できませんパッケージング クラスを介してオブジェクト化されるため、アクセスできません。

数値は次の方法でのみアクセスできます:

数値内の '.' は優先度が高いため、システムはそれを小数点 (浮動小数点型) と見なします。 、そのため、エラーが報告されます

そして、ブール型は直接次のようになります


詳細に分析してみましょう:

num.toString() にはパッケージ化クラスが表示されます:


実際、プロトタイプにはオーバーライドされた toString() メソッドがあります。


プロトタイプチェーンによれば、Number のプロトタイプの __proto__ はオブジェクトのプロトタイプを継承します:


したがって、num.toString() メソッドが呼び出されると、レベルごとに上がります。 Number


のこの関数のプロトタイプが再び実践されます:



ここでの呼び出しは次のようにする必要があります:


継承された toString メソッド必要に応じて、ここの object.prototype から 切り詰めるには:


このメソッドを書き換えるだけです

結果:



以下に、自動的に書き換えられたものをいくつか示します:



最後に、小さなバグについて話しましょう:


これは、js の精度が不正確であるためです

この記事では、プロトタイプとプロトタイプ チェーンの関連内容について説明します。 PHP 中国語 Web サイトに注意してください。

関連する推奨事項: JQuery での

DOM 操作 - ラップ

django はリクエストを使用してブラウザーから送信されたパラメーターを取得します

このバインディングに反応するに関するいくつかの考え

以上がプロトタイプおよびプロトタイプチェーンの関連コンテンツの説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート