国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

6種JavaScript繼承方式及優缺點(小結)

2024-05-06 15:44:12
字體:
來源:轉載
供稿:網友

溫馨提示:想要更好的理解JS繼承方式,須了解構造函數、原型對象、實例化對象、原型鏈等概念

第一種:原型鏈繼承

利用原型鏈的特點進行繼承

function Parent(){  this.name = 'web前端';  this.type = ['JS','HTML','CSS'];}Parent.prototype.Say=function(){  console.log(this.name);}function Son(){};Son.prototype = new Parent();son1 = new Son();son1.Say();

以上例子解釋:

①創建一個叫做Parent的構造函數,暫且稱為父構造函數,里面有兩個屬性name、type
②通過Parent構造函數的屬性(即原型對象)設置Say方法,此時,Parent有2個屬性和1個方法
③創建一個叫做Son的構造函數,暫且稱為子構造函數
④設置Son的屬性(即原型對象)值為父構造函數Parent的實例對象,即子構造函數Son繼承了父構造函數Parent,此時Son也有2個屬性和1個方法
⑤對Son構造函數進行實例化,結果賦值給變量son1,即son1為實例化對象,同樣擁有2個屬性和1個方法
⑥輸出son1的Say方法,結果為"web前端"

優點:可以實現繼承

缺點:
①因為Son.prototype(即原型對象)繼承了Parent實例化對象,這就導致了所有Son實例化對象都一樣,都共享有原型對象的屬性及方法。代碼如下:

son1 = new Son();son2 = new Son();son1.type.push('VUE');console.log(son1.type);//['JS','HTML','CSS','VUE']console.log(son2.type);//['JS','HTML','CSS','VUE']

結果son1、son2都是['JS','HTML','CSS','VUE']
②Son構造函數實例化對象無法進行參數的傳遞

第二種:構造函數繼承

通過構造函數call方法進行繼承,直接來看代碼:

function Parent(){  this.name = 'web前端';  this.type = ['JS','HTML','CSS'];}function Son(){  Parent.call(this);}son1 = new Son();son1.type.push('VUE');console.log(son1.type);//['JS','HTML','CSS','VUE']son2 = new Son();console.log(son2.type);//['JS','HTML','CSS']

以上例子解釋:
①創建父級構造函數Parent,有name、type兩個屬性
②創建子級構造函數Son,函數內部通過call方法調用父級構造函數Parent,實現繼承
③分別創建構造函數Son的兩個實例化對象son1、son2,對son1的type屬性新增元素,son2沒有新增,結果不一樣,說明實現了獨立

優點:
①實現實例化對象的獨立性;
②還可以給實例化對象添加參數

function Parent(name){  this.name = name;}function Son(name){  Parent.call(this,name);}son1 = new Son('JS');console.log(son1);//JSson2 = new Son('HTML');console.log(son2);//HTML

缺點:
①方法都在構造函數中定義,每次實例化對象都得創建一遍方法,基本無法實現函數復用
②call方法僅僅調用了父級構造函數的屬性及方法,沒有辦法調用父級構造函數原型對象的方法

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 维西| 湘潭市| 曲水县| 霍邱县| 棋牌| 从江县| 遵义县| 孝义市| 朝阳区| 定远县| 宁远县| 临夏市| 东兰县| 万荣县| 泸西县| 金溪县| 泌阳县| 定安县| 吉木乃县| 民丰县| 普安县| 高清| 丰顺县| 太和县| 阿拉尔市| 益阳市| 平阴县| 汤阴县| 乌拉特后旗| 平昌县| 穆棱市| 于都县| 江口县| 濮阳市| 巩义市| 苗栗市| 安国市| 读书| 锡林郭勒盟| 江山市| 射洪县|