日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript面向对象——深入理解原型继承

發布時間:2023/12/31 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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面向对象——深入理解原型继承的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。