為何用“繼承”為標(biāo)題付翁,而不用“原型鏈”筛欢?
因?yàn)閖ava中的繼承與javascript中的繼承又完全是兩回事兒恢共。因此战秋,這里把“繼承”著重拿出來(lái),就為了體現(xiàn)這個(gè)不同讨韭。
java是類繼承脂信,
javascript中的繼承是通過(guò)原型鏈來(lái)體現(xiàn)的。先看幾句代碼
function Foo() {
}
var f = new Foo()
f.a = 1
Foo.prototype.a = 100;
Foo.prototype.b = 200;
console.log(f.a) // 1
console.log(f.b) // 200
以上代碼中透硝,f是Foo函數(shù)new出來(lái)的對(duì)象狰闪,f.a是f1對(duì)象的基本屬性,f.b是怎么來(lái)的呢濒生?——從Foo.prototype得來(lái)埋泵,因?yàn)閒.__proto __指向的是Foo.prototype
訪問(wèn)一個(gè)對(duì)象的屬性時(shí),先在基本屬性中查找甜攀,如果沒有秋泄,再沿著__proto __這條鏈向上找琐馆,這就是原型鏈。
而Foo.prototype是通過(guò)原型鏈(__proto __)繼承自O(shè)bject.prototype
區(qū)分是自己的屬性還是繼承的屬性可以用 hasOwnProperty來(lái)區(qū)分