博客 / 詳情

返回

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

從關係圖中可以看出來,ECMAScript中創建一個對象是通過new構造函數實現的,而本質上來説這個對象其實是以構造函數的屬性prototype指向的對象為基本模板的,因此新對象的__proto__屬性表明了自己來源於誰。

prototype

該屬性用來指向創建一個對象的基本模板,默認指向new構造函數,也可以修改,或者通過改屬性為新對象添加屬性。

需要注意的是,該屬性只有函數才有。

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

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

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

clazz.getName();

proto

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

該屬性的意思指創建該對象的構造函數的prototype,因此你可以通過對象的該屬性修改原型。

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();
user avatar ziyeliufeng 頭像 _raymond 頭像 columsys 頭像 kevin_5d8582b6a85cd 頭像 user_ze46ouik 頭像 icezero 頭像 gfeteam 頭像 layouwen 頭像 denzel 頭像 zhangguoye 頭像 geoffzhu 頭像 eraitianshi 頭像
33 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.