ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript のプロトタイプとプロトタイプ チェーンの簡単な紹介

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

不言
不言転載
2018-10-20 16:49:051767ブラウズ

この記事では、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 までご連絡ください。