理解prototype和__proto__(繼承與原型鏈)

從關係圖中能夠看出來,ECMAScript中建立一個對象是經過new構造函數實現的,而本質上來講這個對象實際上是以構造函數的屬性prototype指向的對象爲基本模板的,所以新對象的__proto__屬性代表了本身來源於誰。git

prototype

該屬性用來指向建立一個對象的基本模板,默認指向new構造函數,也能夠修改,或者經過改屬性爲新對象添加屬性。github

須要注意的是,該屬性只有函數纔有。函數

//構造函數
function Clazz(name) {
    this.name = name;
}

//建立對象
var clazz = new Clazz('你好2007');

//經過prototype給對象添加方法
Clazz.prototype.getName = function () {
    alert(this.name);
};

clazz.getName();

proto

這個是對象上的屬性,比較有意思,由於不是標準中規定的,使用的時候要當心。this

該屬性的意思指建立該對象的構造函數的prototype,所以你能夠經過對象的該屬性修改原型。spa

function Clazz(name) {
    this.name = name;
}

var clazz = new Clazz('你好');
var clazz2 = new Clazz('2007');

//經過__proto__給原型添加方法,這樣建立的對象也會有該方法
clazz2.__proto__.getName = function () {
    alert(this.name);
};

clazz.getName();
相關文章
相關標籤/搜索