原型オブジェクト

3452 ワード

原型オブジェクト
ここではプロトタイプチェーンを紹介しません.
javascriptの中に「prototype」/「proto」と似ている属性/関数がいくつかあります.ここで簡単にまとめてみます.彼らは何ですか?どれが原型の対象ですか?どちらが違いますか?
[Prototype]
このオブジェクトの内蔵スロットは、プログラマには見えない(直接操作できない).[Prototype]は、javasciptオブジェクトの原型オブジェクトを記録しています.
ECMA 262については以下のように紹介しています.
All ordinary object s have an internal slaot caled[Prottype].The value of this internal sloot is ethernull or an object and is used for implement inhers.Data properties of the[Prottype]object art inhersited(and visible as properties of the child object)for the purposes of geaccess,but for access.
[[Get ProttotypeOf]]
これは対象の内蔵スロットであり、プログラマが直接操作できない.オブジェクトの「Prottype」スロットを取得する方法です.
ECMA 262では、Proxyタイプのオブジェクトを除いて、他のオブジェクトの[Get ProttotypeOf]が直接[Prottype]の値に戻ります.Object.getPrototypeOf(O)Objectオブジェクトのget ProttypeOfメソッドです.これはプログラマが呼び出すことができるものです.Oが対象の場合、O.[Get ProttypeOf]()に戻る.
これは、Oのプロトタイプオブジェクトを取得するためにプログラマが使用できる方法である.Object.prototype.__proto__obj.__proto__は、javascriptでよく使われるプロトタイプオブジェクトを取得する方法でもある.これは実際にgetter/setterです.
getterとして使用する場合、obj.__proto__obj.[Get ProttypeOf]()、すなわち、Objの原型オブジェクトを取得することができる.Object.getPrototypeOf(obj)の結果と一致した.
ECMA 262によれば、この属性はブラウザのみで提供されます.足りないnodeもこの属性を提供しました.Object.prototype上に定義されているので、Object.prototypeobjのプロトタイプチェーン上にあるときにのみ、この属性が使用されることができる.Object.prototypeがプロトタイプチェーン上にいない場合(例えばObject.create(null)によって生成されたオブジェクト)、この属性は使用できません.Object.getPrototypeOf(O)であれば、この限りではない.prototypeこれはプロトタイプのように見える属性ですが、対象のプロトタイプのオブジェクトではありません.すなわち、obj.prototypeobjのプロトタイプオブジェクトではない.
構造関数にはこの属性があります.ECMA 262におけるその紹介は以下の通りである.
Function instancs that can be used as a constructor have aprototype property.Whenever such a Function instance is created another ordinary object is also created and is the initial value of the function'sprototype property.Uless otherswise specified,the value of theprototype property is used to initialize the[Prottype]internal slot of the object created when that function is invoked as a construct.
This property has the atributes{[[Writable]]]:true、[[Enumerable]]]:false、[[Configurble]]:false.
一般的には、構造関数(F)を使用して新しいオブジェクト(obj)を作成すると、構造関数のprototype属性(F.prototype)が、新しいオブジェクトの原型オブジェクト(obj.[Prottype])となる.F.prototypeFの原型オブジェクトではない.F.prototypeは、通常、new F(...)のプロトタイプオブジェクトである.instanceofobj instanceof Fは、objFの例であるかどうかを確認する.Fobjのプロトタイプチェーン上にあるかどうかを確認するのではない.この検査は、Fが構造関数であることを要求し、F.prototypeobjのプロトタイプチェーン上にあるかどうかを確認する.
Instance OfOperator(V、target):
The abstract operation Instancoff perator(
V
target)implements the generanic algorithm for determining if ECMAScript value
V is an instance of object
targt eigther by consulting
target's@hasinstance method or、if absent、determining whether the value of
タージprototype property is present in
V's prototype chain.
一般的にobjというのはFタイプのオブジェクトであり、F.prototypeobjのプロトタイプチェーン上にあることを指す.