1. 程式人生 > >javascript原型鏈繼承

javascript原型鏈繼承

UNC 返回值 object def fin java tostring cti 指向

當定義一個函數的時候,函數對象就會默認帶一個prototype對象屬性。

通過new去構造一個對象(obj),它的原型會指向構造器的prototype屬性(foo.prototype)。

function foo(){
}
foo.prototype.z = 3;
var obj = new foo();
obj.x = 1;
obj.y = 2;
console.log(obj.x,obj.y,obj.z); //1,2,3
//雖然在obj對象上沒有定義toString屬性
//但在原型鏈Object.prototype上定義
console.log(typeof obj.toString) //function

當我們去訪問obj.x和obj.y的時候,發現這個對象上有有x屬性和y屬性,所以返回值為1和2。當訪問obj.z時發現對象上沒有這個屬性,js並不會停止查找,而是會查找它的原型(foo.prototype)。在它的原型上發現有z屬性,所以返回值為3。

用函數對象默認的prototype對象也是有原型的,它的原型為Object.prototype。而Object.prototype的原型則是null。

總結:當在一個對象上沒有找到屬性,js就會通過原型鏈向上去查找,一直找到null如果還沒有找到的話,就返回undefined

function foo(){
}
foo.prototype.z 
= 3; var obj = new foo(); obj.z = 5; console.log(obj.z,foo.prototype.z); //5,3

由於在obj上可以查到屬性z,就會直接返回,而不會向上查找

javascript原型鏈繼承