JavaScriptノート:原型と原型チェーン

13510 ワード

プロトタイプ
プロトタイプの翻訳はプロトタイプと言います.各コンストラクションにはプロトタイプがあります.そしてプロトタイプは対象です.中には2つの属性があります.proto_
Nice.prototype {
constructor: ƒ Nice(),
__proto__: Object
}
その中で、「constructor」はコンストラクタと呼ばれ、帰ってきたのはこのオブジェクトを構成するコンストラクタ、つまりNice()そのものです.
「ウプロモーション」は、属性を内蔵しており、対象ごとにグウがあります.proto_,この属性はその構造関数を作成するプロトタイプのオブジェクトを指し、最終的にはObjectを指し、Objectにはいくつかの方法と属性が内蔵されています.
基本的な使い方
プロトタイプの概念は基本的に整理されています.次にプロトタイプの使い方を見ます.ここは一番簡単な使い方です.コンストラクタのプロトタイプに属性を定義して、それによって具体的なオブジェクトは全部継承できます.
Person.prototype.name = "hehe"; // Person        
function Person(){

}
var person = new Person();
console.log(person.name)
-----------------------------------------
"hehe"
構造関数Personのprototypeにname属性を追加した場合、Personを通じてオブジェクトを実例化し、name属性を持っています.
prototypeは、一般的に公有の属性を原型に置くので、作成するごとに対象に値を付けずに冗長性をもたらす.
Car.prototype.height = 1400;
Car.prototype.long = 4900;
Car.prototype.carName = "BMW";
/*
         :
    Car.prototype = {
        height = 1400,
        long = 4900,
        carName = "BMW"
    }
*/
function Car(color,owner) {
    this.owner = owner;
    this.color = color;
    this.drive = function() {
        console.log('driving')
    }
}
var car = new Car('red','zc');
var car = new Car('white','ln');
console.log(car1.height);
-----------------------------------
1400
具体化されたオブジェクトは構造関数のプロトタイプの属性を継承しており、直接に呼び出すことができます.
原型の添削
属性を追加
    Person.prototype.LastName = ' ';
    function Person(name) {
        this.name = name;
    }
    var person = new Person('  ');
属性を検索
    console.log(person.LastName)
    ---------------------------------------- 
    " "
属性の変更
    Person.prototype.LastName = ' ';
属性を削除
delete Person.prototype.LastName
この場合、新規オブジェクトをnewで実例化すると、LastName属性が引き継がれなくなり、呼び出すことができません.
原型チェーン
JavaScriptのプロトタイプチェーンはpythonの後継者に似ています.最終的にはObjectを指します.具体例のオブジェクトごとに、内部に_u_があります.プロト.属性は、構造関数のプロトタイプを指します.
Grand.prototype.name = "Deng";
function Grand (){
    this.height = 180;
}

var grand = new Grand();

Father.prototype = grand; //   grand   
function Father (){
    this.name = "xiaoming";
    this.num = 100;
}

var father = new Father();

Son.prototype = father; //   father   
function  Son() {
    this.hobbit = "smoke";
}
var son = new Son();
grand>father>sonは、プロトタイプがチェーンになっています.作用ドメインと同じルックアップモードを持っています.サブセットにない属性は父のレベルに上がって検索します.
	son.__proto__ === Son.prototype
	Son.prototype === father

	father.__proto__ === Father.prototype
	Father.prototype === grand

	grand.__proto__ === Grand.prototype
	Grand.prototype.__proto__ === Object.prototype