ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript のプロトタイプとプロトタイプ チェーンの簡単な紹介

JavaScript のプロトタイプとプロトタイプ チェーンの簡単な紹介

不言
リリース: 2018-10-20 16:49:05
転載
1783 人が閲覧しました

この記事では、JavaScript のプロトタイプとプロトタイプ チェーンについて簡単に説明します。必要な方は参考にしていただければ幸いです。

[[プロトタイプ]]

ほとんどすべてのオブジェクトは、作成時に [[プロトタイプ]] チェーンを生成します。これは、人々がよくプロトタイプ チェーンと呼ぶものです。オブジェクトのプロパティを参照するとき、オブジェクトの [[Get]] 操作がトリガーされます。デフォルトの [[Get]] 操作の場合、最初のステップは、現在のオブジェクトに必要なプロパティがあるかどうかを確認することです。見つからない場合は、このオブジェクトのプロトタイプ チェーンが検索されます。例:

var one = {
  type: 'one'
}
var two = Object.create(one)

console.log(two.type) // one
ログイン後にコピー

上の例では、type 属性がありません。 2 つのオブジェクトですが、Object.create (指定されたプロトタイプ オブジェクトと属性を使用して新しいオブジェクトを作成する) により、プロトタイプ チェーンの検索プロセス中に、型が異なっていても、1 つのオブジェクトと 2 つのオブジェクトが結合されます。 2 つのオブジェクト内で属性が見つからない場合は、1 つのオブジェクト内で type 属性を検索して出力します。プロトタイプ チェーンを最後まで検索して見つからなかった場合は、unknown## が出力されます。

#prototype

最初にプロトタイプとは何かを明確に説明するための簡単な例:

function origin(type) {
  this.type = type
  console.log(this.type)
}
origin.prototype.name = 'origin'
var son1 = new origin('male')
var son2 = new origin('male')
console.log(son1.name) // origin
console.log(son2.name) // origin
ログイン後にコピー
関数originのプロトタイプ属性は、実際にはこのオブジェクトと同等です。したがって、 name 属性が呼び出されると、プロトタイプ チェーンまで検索され、origin.prototype.name の値が出力されます。別の観点から見ると、関数はインスタンスのプロトタイプを指します。son1 と Son2 は関数のorigin

constructor## のプロトタイプ オブジェクトを継承するとも言えます。 #最初に簡単な例を見てみましょう:

function origin() {

}
const son = new origin()
console.log(origin.prototype.constructor === origin) // true
console.log(son.constructor === origin) // true
ログイン後にコピー

origin.prototype には、デフォルトでパブリックで列挙不可能な属性であるコンストラクターがあり、この属性はオブジェクトに関連付けられた関数、つまり、origin.prototype を参照します。構築する =origin であり、インスタンス オブジェクトの Son にも construcor 属性があり、このオブジェクトを作成した関数を指します

_proto__

__proto__ は、実際にはほとんどのブラウザでサポートされている関数です内部プロトタイプ チェーンの属性にアクセスするには

    son.__proto__ === origin.prototype // true
ログイン後にコピー

son.__proto__ を呼び出すと実際に Son.__proto__() が呼び出される場合、戻り値は Object.getPrototypeOf(origin) の結果と同じになります

以上がJavaScript のプロトタイプとプロトタイプ チェーンの簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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