jsのプロトタイプとプロトタイプチェーンとは何ですか

coldplay.xixi
リリース: 2020-11-03 14:18:56
オリジナル
26049 人が閲覧しました

js のプロトタイプとプロトタイプ チェーンは次のとおりです: 1. プロトタイプ パターンは、パフォーマンスを確保しながら繰り返しオブジェクトを作成するために使用されます。このタイプのデザイン パターンは、オブジェクトを作成する方法を提供する作成パターンです。方法; 2. プロトタイプ チェーンは、プロトタイプ オブジェクトの作成プロセスの履歴記録であり、オブジェクトの特定の属性にアクセスするとき、最初にオブジェクト自体の属性を検索します。

jsのプロトタイプとプロトタイプチェーンとは何ですか

関連する無料学習の推奨事項: javascript (ビデオ)

js のプロトタイプとプロトタイプ チェーンは次のとおりです:

  • JavaScript は、ソフトウェアにおけるプロトタイプ ベースの言語です。デザインパターンにはプロトタイプパターンと呼ばれるパターンがあり、JavaScriptはこのパターンを利用して作成されました

  • プロトタイプパターンは、パフォーマンスを確保しながら繰り返しオブジェクトを作成するために使用されます。オブジェクトを作成する最適な方法を提供する作成パターン。このパターンは、現在のオブジェクトのクローンを作成するために使用されるプロトタイプ インターフェイスを実装します。プロトタイプ パターンの目的は、プロトタイプ インスタンスを使用して、作成するオブジェクトのタイプを指定し、これらのプロトタイプをコピーして新しいオブジェクトを作成することです。つまり、既存のプロトタイプ オブジェクトを使用して、新しいオブジェクト インスタンスを迅速に生成できます。プロトタイプ オブジェクトと同じです

  • プロトタイプ: コピー (またはクローン) できるクラス。プロトタイプをコピーすることで、まったく同じ新しいオブジェクトを作成できます。また、次のようにも言えます。プロトタイプはテンプレートであり、設計言語ではより正確です。これはオブジェクト テンプレートであると言われます

1) プロトタイプは、いくつかのパブリック プロパティとメソッドを定義します。新しいオブジェクト インスタンスが作成されます。プロトタイプを使用すると、プロトタイプのすべてのプロパティとメソッドが共有されます

コード例:

    // 创建原型
    var Person = function(name){
        this.name = name;
    };
    // 原型的方法
   Person.prototype.sayHello = function(){
       console.log(this.name+",hello");
   };
   // 实例化创建新的原型对象,新的原型对象会共享原型的属性和方法
   var person1 = new Person("zhangsan");
   var person2 = new Person("lisi");
   // zhangsan,hello
   person1.sayHello();
   // lisi,hello
   person2.sayHello();
ログイン後にコピー

2) 厳密モードでも、プロトタイプのプロパティとメソッドはプロトタイプ インスタンスによって共有されます。

コード例:

    // 开启严格模式,原型的属性和方法还是会被原型实例所共享的
   "use strict";
    // 创建原型
    var Person = function(name){
        this.name = name;
    };
    // 原型的方法
   Person.prototype.sayHello = function(){
       console.log(this.name+",hello");
   };
   // 实例化创建新的原型对象,新的原型对象会共享原型的属性和方法
   var person1 = new Person("zhangsan");
   var person2 = new Person("lisi");
   // zhangsan,hello
   person1.sayHello();
   // lisi,hello
   person2.sayHello();
ログイン後にコピー

3) 合格 プロトタイプによって作成された新しいオブジェクト インスタンスは互いに独立しています。新しいオブジェクト インスタンスに追加されたメソッドのみがこのメソッドを持ち、他のインスタンスは持ちます。このメソッドはありません。

インスタンス コード:

    // 创建原型
    var Person = function(name){
        this.name = name;
    };
    // 原型的方法
   Person.prototype.sayHello = function(){
       console.log(this.name+",hello");
   };
   // 实例化创建新的原型对象,新的原型对象会共享原型的属性和方法
   var person1 = new Person("zhangsan");
   var person2 = new Person("lisi");
   // zhangsan,hello
   person1.sayHello();
   // lisi,hello
   person2.sayHello();
   
   // 为新对象实例添加方法
   // 通过原型创建的新对象实例是相互独立的
   person1.getName = function(){
       console.log(this.name);
   }
   // zhangsan
   person1.getName();
   // Uncaught TypeError: person2.getName is not a function
   person2.getName();
ログイン後にコピー

4) プロトタイプの概要:

  • すべての参照型には __proto__## があります。 # (暗黙のプロトタイプ) 属性、および属性値は通常のオブジェクトです

  • すべての関数にはプロトタイプ (プロトタイプ) 属性があり、属性値は通常のオブジェクトです

  • すべての参照型の

    __proto__ 属性はその構造を指します 関数のプロトタイプ

5) 関数のプロトタイプ: 関数のみプロトタイプを持っています。プロトタイプは、現在のコンストラクタの参照アドレスを指すオブジェクトです。

6) 関数のプロトタイプ プロトタイプ オブジェクト __proto__: すべてのオブジェクトは __proto__ 属性を持ちます。オブジェクトがインスタンス化されたとき (新規)コンストラクターを使用すると、新しいオブジェクトの __proto__ 属性はコンストラクターのプロトタイプを指します

##7) プロトタイプ オブジェクトのプロトタイプと関数の関係

##説明:jsのプロトタイプとプロトタイプチェーンとは何ですか

    __proto__
  • すべての関数は関数プロトタイプを指します

    プロトタイプからの新しいオブジェクトコンストラクター
  • __proto__
  • はコンストラクターのプロトタイプを指します

    非コンストラクターのインスタンス化オブジェクトの
  • __proto__
  • またはオブジェクトのプロトタイプは、次を指します。オブジェクトのプロトタイプ

    オブジェクトのプロトタイプは null を指します
  • #8) すべて プロトタイプ オブジェクトは、コンストラクター (constructor) 属性を自動的に取得します。これ (ポインター) は、プロトタイプ属性が配置されている関数 (パーソン) を指します (パーソン)
9) インスタンスのコンストラクター属性 (constructor) は、コンストラクターを指します:

person1.constructor == person

10) プロトタイプ オブジェクト (person.prototype) はコンストラクター (person) のインスタンスです

11) プロトタイプの分類:

暗黙的なプロトタイプ (_proto_): 上記のプロトタイプは、JavaScript の組み込みプロパティ [[プロトタイプ]] です。このプロパティはオブジェクト object から継承されており、スクリプトでそれにアクセスする標準的な方法はありません [ [プロトタイプ]] ですが、Firefox、Safari、Chrome は各オブジェクトの属性 _proto_ をサポートしています。暗黙的プロトタイプの役割は、プロトタイプ チェーンを形成し、プロトタイプ ベースの継承を実装することです
  • ##Displayプロトタイプ (プロトタイプ): 各関数が作成されると、その関数のプロトタイプ オブジェクトを指す

    prototype

    属性が付けられます。プロトタイプを表示する機能は、プロトタイプ ベースの継承と属性を実装することです。共有
  • 12) プロトタイプの使用方法:

    Calculator オブジェクトのプロトタイプ プロパティにオブジェクト リテラルを割り当てて、Calculator オブジェクトのプロトタイプを設定します。
  • プロトタイプ プロトタイプを割り当てるときは、関数がすぐに実行して値を割り当てる式を使用します。プライベート関数をカプセル化し、単純な使用名を return の形式で公開して、パブリック/プライベート効果を実現できます

プロトタイプ チェーン

##

1) プロトタイプ チェーン: プロトタイプ チェーンは、プロトタイプ オブジェクトの作成プロセスの履歴記録です。オブジェクトの属性にアクセスするとき、最初にオブジェクト自体の属性を検索します。見つからない場合は、 __proto_ に移動し、暗黙のプロトタイプ、つまりコンストラクターのプロトタイプを検索します。まだ見つからない場合は、コンストラクターのプロトタイプの __proto__ で検索されます。式の構造

2) プロトタイピングの問題: オブジェクトのプロパティを探すとき、JavaScript は、プロトタイプ チェーンに従ってオブジェクトのプロトタイプを上向きにたどって、プロトタイプチェーンの先頭に到達するまで、指定された名前のプロパティを追加し、指定された属性が見つからない場合は undefined が返されます

プロトタイプチェーンの継承時に属性を検索するプロセスであることも理解できます最初に独自の属性を検索します。独自の属性が存在しない場合は、プロトタイプ チェーンで段階的に検索されます

3) hasOwnProperty 関数: オブジェクト自体にオブジェクトが含まれているかどうかを確認するために使用できます。特定の属性。戻り値はブール値です。属性が存在しない場合、オブジェクト プロトタイプ チェーンは上方向に検索されません。JavaScript でそれを処理する唯一のプロパティは hasOwnProperty です。プロトタイプ チェーンを検索しない関数

4) getOwnPropertyNames 関数: オブジェクト自体のすべてのプロパティを取得できます。戻り値は、オブジェクト自身のプロパティ名で構成される配列です。また、オブジェクト プロトタイプ チェーン内で上方向の検索は行いません

# 5) プロトタイプ チェーンの概要:

  • null が見つからなくなるまで上向きに検索を続け、未定義を返します

  • Object.prototype .__proto__ === null

  • #プロトタイプまたは上位レベルのプロトタイプから取得および実行されるすべてのメソッド。実行時に現在のトリガーを指します。 イベント実行のオブジェクト

  • #6) JavaScript のプロトタイプは、オブジェクト間の接続を実現し、コンストラクターがデータを共有できない問題を解決するために導入された属性であり、プロトタイプチェーンはその接続を実現する手段ですオブジェクト間、つまり主な継承方法

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!