javascript
JavaScript面向对象——深入理解原型继承
JavaScript繼承——深入理解原型繼承
原型繼承
// 父類function School (name, address) {this.name = namethis.address = address}// 為父類添加公有方法School.prototype.getName = function () {return "Name is " + this.name}// 子類function College() {}// 繼承父類College.prototype = new School('GDOU', '廣東省湛江市')var college1 = new College()console.log(college1.getName()) // Name is GDOU解析:可以看到,College的實(shí)例對象college1調(diào)用了不屬于College類的方法,也就是實(shí)現(xiàn)了繼承,為這么這樣能實(shí)現(xiàn)呢?原理很簡單,通過new School()新建了一個(gè)父類的對象,把這個(gè)對象賦值給了子類College的原型,所以College.prototype其實(shí)是一個(gè)父類的實(shí)例,驗(yàn)證:
而對象college1是College的實(shí)例,所以college1.__proto__指向了College.prototype所指向的對象,所以college1能訪問College.prototype上的屬性,驗(yàn)證:
也就是說新建一個(gè)對象調(diào)用方法時(shí),在創(chuàng)建它的類中找不到時(shí),會(huì)到College.prototype上找,新建第二個(gè)時(shí)也是一樣,這時(shí)候就會(huì)產(chǎn)生一個(gè)問題。
看另一個(gè)比較有助于理解例子:
function SuperClass() {this.books = ['JavaScript', 'Nodejs', 'Java']}function SubClass() {}SubClass.prototype = new SuperClass()var instance1 = new SubClass()var instance2 = new SubClass()console.log(instance1.books) // ['JavaScript', 'Nodejs', 'Java']console.log(instance2.books) // ['JavaScript', 'Nodejs', 'Java']instance1.books.push('湊熱鬧的')console.log(instance2.books) // ['JavaScript', 'Nodejs', 'Java', '湊熱鬧的']可見instance1改變books的值后,instance2的也會(huì)被修改,原因正是instance1與instance2的__proto__都指向創(chuàng)建自身的類(SubClass())的prototype所指向的對象。
除此問題外,這種繼承方式無法通過子類傳遞參數(shù),存在著比較大的缺陷,如何解決這兩個(gè)問題?
有興趣請移步:http://blog.csdn.net/fabulous1111/article/details/79593658
總結(jié)
以上是生活随笔為你收集整理的JavaScript面向对象——深入理解原型继承的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文华商品指数
- 下一篇: JavaScript面向对象——理解构造