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的實例對象college1調用了不屬于College類的方法,也就是實現了繼承,為這么這樣能實現呢?原理很簡單,通過new School()新建了一個父類的對象,把這個對象賦值給了子類College的原型,所以College.prototype其實是一個父類的實例,驗證:
而對象college1是College的實例,所以college1.__proto__指向了College.prototype所指向的對象,所以college1能訪問College.prototype上的屬性,驗證:
也就是說新建一個對象調用方法時,在創建它的類中找不到時,會到College.prototype上找,新建第二個時也是一樣,這時候就會產生一個問題。
看另一個比較有助于理解例子:
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的也會被修改,原因正是instance1與instance2的__proto__都指向創建自身的類(SubClass())的prototype所指向的對象。
除此問題外,這種繼承方式無法通過子類傳遞參數,存在著比較大的缺陷,如何解決這兩個問題?
有興趣請移步:http://blog.csdn.net/fabulous1111/article/details/79593658
總結
以上是生活随笔為你收集整理的JavaScript面向对象——深入理解原型继承的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 文华商品指数
- 下一篇: 黑天鹅事件是什么意思
