ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript のプロトタイプの属性を理解する_JavaScript のヒント

JavaScript のプロトタイプの属性を理解する_JavaScript のヒント

WBOY
WBOYオリジナル
2016-05-16 17:56:18744ブラウズ

実際、プロトタイプはほんの数文で要約できます:
すべてのプロトタイプはオブジェクトであり、オブジェクトのみがプロトタイプを持ちます
関数のみがプロトタイプ属性を持ちます。これは、この関数が生成されたときに生成されるオブジェクトによって継承されるプロトタイプです。コンストラクターとして使用されます。関数のプロトタイプは、そのプロトタイプ属性とは何の関係もありません。
オブジェクトのプロトタイプには、非標準属性 __proto__ または ECMAScript5 メソッド Object.getPrototypeOf() を通じてアクセスできます。
1 は実際には間違っています。プロトタイプ チェーンの最後にあるオブジェクトにはプロトタイプがありません。ただし、より簡単な表現のために。プロトタイプ チェーンを見れば、.toString() などの未定義メソッドがどのように由来するかがわかります。
上記の曖昧さは文字通りの理解に基づいており、文法自体には曖昧さはありません。プロトタイプとは原型という意味ですが、オブジェクトの原型はプロトタイプからアクセスされるわけではありません。
関数にはプロトタイプ属性がありますが、それ自体のプロトタイプとは何の関係もありません。これを理解した上で、プロトタイプチェーンや継承に関する記事を読むとより理解しやすくなります。

理解を深めるための例をいくつか示します:

コードをコピーします コードは次のとおりです:

// あらゆるオブジェクトにはプロトタイプがあります
obj = {};
console.log( Object.getPrototypeOf(obj) ); 🎜>console.log( obj.__proto__ === Object.getPrototypeOf(obj) );

//オブジェクトには文法的に意味のあるプロトタイプ属性がありません
alert(obj.prototype) //未定義

//プロトタイプは属性として Function 内にのみ存在し、この Function によって作成された新しいインスタンスと統合されたプロトタイプを表し、Function 自体のプロトタイプとは何の関係もありません
var F = function (name){
this.name = name ;
}
obj = {a:3,
get b (){
return this.a;

F.prototype = obj;
newObj = new F('new name'); //name は newObj の独自のプロパティです。 //3
//obj を継承します。これは次の方法で確認できます。
Object.getPrototypeOf( newObj ) === obj; // true
newObj.__proto__ === obj;
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。