動態

詳情 返回 返回

理解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();

Add a new 評論

Some HTML is okay.