Javascriptは対象に向ける:原型と原型に基づく対象システム

5543 ワード

Javascriptは動的シナリオ言語であり、生まれながらに類の概念がないことを知っています.モデルに基づいた対象言語で、関数こそJsの一等国民です.JSプログラミングにおける関数、オブジェクト、プロトタイプの概念は間違いなく重い.ここでは、Jsのプロトタイプに基づく対象システムの学習を簡単にまとめます.
1、原型モード
既存のオブジェクトをクローンして新しいオブジェクトを作成します.
コードを見てみます.
    var Pandora = function() {
        this.name = "Pandora_G",
        this.years = 20,
        this.love = "python"
    };

    //    Pandora " " 
    var g = new Pandora();
    g.name = "Pandora_Galen";
    g.years = 22;
    g.love = "JavaScript";

    console.log( g ); //   : { name: 'Pandora_Galen', years: 22, love: 'JavaScript' }
2、原型継承
Javascriptコードはプロトタイプの基礎としてよく使われます.プロトタイプのプログラミング原則は主に4つあります.
  • すべてのデータは対象です.
  • オブジェクトを得るには、インスタンスクラスを介してではなく、オブジェクトを見つけてクローン化する必要があります.
  • JavaScriptの中で、各オブジェクトはそれぞれの原型を覚えます.
  • オブジェクトがある要求に応答できない場合、プロトタイプチェーンを通じてこの要求をそのコンストラクタのプロトタイプに委託する.
  • Javascriptの対象システムは以上の4点の原則/規則の基礎の上に成り立っています.
    2-1、すべてのデータは対象です.
    JavaScriptルート対象:Object
    Jsのすべての対象の祖先.これは空のオブジェクトです.Jsで見たすべての対象はクローンと対象から来たと言えますが、Object.prototypeはすべての対象の原型です.
        var obj1 = new Object();
        var obj2 = {};
    
        console.log( Object.getPrototypeOf( obj1 ) === Object.prototype );  //   : true
        console.log( Object.getPrototypeOf( obj2 ) === Object.prototype );  //   : true
    Object.get ProttypeOf()方法は、ECMAScript 5によって提供され、対象のプロトタイプに適合するために提供される.
    2-2、一つのオブジェクトを得るには、インスタンスクラスではなく、オブジェクトを見つけてクローンします.
        //     
        var Person = function ( name ) {
            this.name = name;
        };
        Person.prototype.getName = function() {
            return this.name;
        }
    
        var a = new Person( " Pandora_Galen " );
        console.log( a.name );  //   : Pandora_Galen
        console.log( a.getName );  //   : Pandora_Galen
        console.log( Object.getPrototypeOf( a ) === Person.prototype );   //   : true
    
    2-3、JavaScriptの中で、各対象はそれぞれの原型を覚えます.
    Javascriptオブジェクトとオブジェクトの原型の間の関係は、過去の額の「家譜」の中で、年長者と後輩の関係を考えています.家族図の木の形図を通して、おじいさん、おじいさんのお父さん、お母さん、おじいさんをすばやくはっきりと見つけられます.Jsにもこの線があります.オブジェクトとオブジェクトの原型がつながっています.この線は__proto__属性です.
    Javascriptはオブジェクトに__proto__属性を提供しています.オブジェクトを指すコンストラクタのプロトタイプオブジェクト、すなわち「Contstructor」.プロトタイプです.
    次のコードを見てください
        var g = new Object();
        console.log( g.__proto__ === Object.prototype ); //   :true
    
    __proto__属性は、前述のget ProttotypOf()方法の代わりに使用されてもよい.
    2-4、オブジェクトがある要求に応答できない場合、プロトタイプチェーンを通じてこの要求をプロトタイプに委託する.
    この規則は原型継承の精髄です.
    オブジェクトの原型を他のオブジェクトに動的に指します.
    var obj = { name: "galen" };
    
    var A  = function () {
        this.name = "steven";
    };
    A.prototype = obj;  //           
    
    var a = new A();
    console.log( a.name );  //   : galen
    「クラス」は他の「クラス」を継承します.
    var A = function() {};
    A.prototype = { name: "galen" };
    
    var B = function() {};
    B.prototype = new A();  //    A
    
    var b = new B();
    console.log( b.name );   //   : galen