從關係圖中可以看出來,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();