国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

React Native填坑之旅--class(番外篇)

開發 前端
無論React還是RN都已經邁入了ES6的時代,甚至憑借Babel的支持都進入了ES7。ES6內容很多,本文主要講解類相關的內容。

[[173899]]

無論React還是RN都已經邁入了ES6的時代,甚至憑借Babel的支持都進入了ES7。ES6內容很多,本文主要講解類相關的內容。

構造函數

定義偵探類作為例子。

ES5的“類”是如何定義的。 

  1. function ES5Detective() { 
  2.   console.log('##ES5Detective contructor'); 
  3.  

ES6定義類:

  1. class ES6Detective { 
  2.   constructor() { 
  3.     console.log('Detective constructor'); 
  4.   } 
  5.  

ES6使用了class關鍵字,而且有專門的constructor。ES5里的function ES5Detective既是類的定義,也是構造函數。

屬性

看看這個偵探是從哪本書出來的。

ES5:

  1. ES5Detective.prototype.fromBookName = 'who'

ES6:

  1. class ES6Detective { 
  2.   detectiveName: string; 
  3.   _bookName: string; 
  4.  
  5.   constructor() { 
  6.     console.log('Detective constructor'); 
  7.     this.detectiveName = 'Detective who'; // 屬性 
  8.   } 
  9.  

ES6 getter & setter

  1. class ES6Detective { 
  2.   detectiveName: string; 
  3.   _bookName: string; 
  4.  
  5.   constructor() { 
  6.     console.log('Detective constructor'); 
  7.     this.detectiveName = 'Detective who'
  8.     this._bookName = 'who'
  9.   } 
  10.  
  11.   get fromBookName() { 
  12.     return this._bookName; 
  13.   } 
  14.  
  15.   set fromBookName(value) { 
  16.     this._bookName = value; 
  17.   } 
  18.  

如果只有getter沒有setter而賦值的話就會出現下面的錯誤:

  1. detective.bookAuthor = 'A C'
  2.                      ^ 
  3.  
  4. TypeError: Cannot set property bookAuthor of #<ES6Detective> which has only a getter  

實例方法

偵探是如何解決案件的。

ES5:

  1. ES5Detective.prototype.solveCase = function(caseName) { 
  2.   var dn = this.dectiveName; 
  3.   if(!caseName) { 
  4.     console.log('SOLVE CASE: ' + dn + ' no case to solve'); 
  5.   } else { 
  6.     console.log('SOLVE CASE: ' + dn + ' get case ' + caseName + ' is solved'); 
  7.   } 
  8. };  

或者:

  1. function ES5Detective() { 
  2.   this.dectiveName = 'Detective who'
  3.   console.log('##ES5Detective contructor'); 
  4.   // 實例方法 
  5.   this.investigate = function(scene) { 
  6.     console.log('investigate ' + scene); 
  7.   } 
  8.  
  9.   this.assistant = "assistant who"
  10.  

ES6: 

  1. class ES6Detective { 
  2.   detectiveName: string; 
  3.   _bookName: string; 
  4.  
  5.   constructor() { 
  6.     console.log('Detective constructor'); 
  7.     this.detectiveName = 'Detective who'
  8.     this._bookName = 'who'
  9.   } 
  10.  
  11.   solveCase(caseName) { 
  12.     if(!caseName) { 
  13.       console.log('no case to solve'); 
  14.     } else { 
  15.       console.log('case ' + caseName + ' is solved'); 
  16.     } 
  17.   } 
  18.  

ES6添加方法非常簡單直接。ES5中添加實例方法有兩種方法,一是在prototype里定義,一是在構造函數重定義。在構造函數中定義的實例方法和屬性在每一個實例中都會保留一份,而在原型中定義的實例方法和屬性是全部實例只有一份。

另外,在ES5的構造函數重定義的實例方法可以訪問類的私有變量。比如:

  1. function ES5Detective() { 
  2.   console.log('##ES5Detective contructor'); 
  3.  
  4.   var available: boolean = true; // private field. default income is ZERO. 
  5.   this.investigate = function(scene) { 
  6.     if (available) { 
  7.       console.log('investigate ' + scene); 
  8.     } else { 
  9.       console.log(`i'm not available`); 
  10.     } 
  11.   } 
  12.  

在其他的方法訪問的時候就會報錯。

  1. if (!available) { 
  2.  
  3.  

靜態方法

ES5:

  1. ES5Detective.countCases = function(count) { 
  2.   if(!count) { 
  3.     console.log('no case solved'); 
  4.   } else { 
  5.     console.log(`${count} cases are solved`); 
  6.   } 
  7. };  

類名后直接定義方法,這個方法就是靜態方法。

  1. ES5Detective.countCases(); 

ES6:

  1. class ES6Detective { 
  2.   static countCases() { 
  3.     console.log(`Counting cases...`); 
  4.   } 
  5.  
  6. // call it 
  7. ES6Detective.countCases();  

繼承

ES6使用extends關鍵字實現繼承。

ES5:

  1. function ES5Detective() { 
  2.   var available: boolean = true; // private field. 
  3.  
  4.   this.dectiveName = 'Detective who'
  5.   console.log('##ES5Detective contructor'); 
  6.  
  7.   this.investigate = function(scene) { 
  8.     // 略  
  9.   } 
  10.  
  11.   this.assistant = "assistant who"
  12.  
  13. ES5Detective.prototype.solveCase = function(caseName) { 
  14.   // 略 
  15.  
  16. // inheritance 
  17. function ES5DetectiveConan() { 
  18.   // first line in constructor method is a must!!! 
  19.   ES5Detective.call(this); 
  20.  
  21.   this.dectiveName = 'Conan'
  22.  
  23. // inheritance 
  24. ES5DetectiveConan.prototype = Object.create(ES5Detective.prototype); 
  25. ES5DetectiveConan.prototype.constructor = ES5DetectiveConan;  

ES5繼承的時候需要注意兩個地方:

  1. 需要在子類的構造函數里調用SuperClass.call(this[, arg1, arg2, ...])
  2. 子類的prototype賦值為:SubClass.prototype = Object.create(SuperClass.prototype),然后把構造函數重新指向自己的:SubClass.prototpye.constructor = SubClass。

ES6:

  1. class ES6Detective { 
  2.   constructor() { 
  3.     console.log('Detective constructor'); 
  4.     this.detectiveName = 'Detective who'
  5.     this._bookName = 'who'
  6.   } 
  7.  
  8.   solveCase(caseName) { 
  9.     if(!caseName) { 
  10.       console.log('no case to solve'); 
  11.     } else { 
  12.       console.log('case ' + caseName + ' is solved'); 
  13.     } 
  14.   } 
  15.  
  16.   get fromBookName() { 
  17.     return this._bookName; 
  18.   } 
  19.  
  20.   set fromBookName(value) { 
  21.     this._bookName = value; 
  22.   } 
  23.  
  24.   get bookAuthor() { 
  25.     return 'Author Who'
  26.   } 
  27.  
  28.   static countCases() { 
  29.     console.log(`Counting cases...`); 
  30.   } 
  31.  
  32. class ES6DetectiveConan extends ES6Detective { 
  33.   constructor() { 
  34.     super(); 
  35.     console.log('ES6DetectiveConan constructor'); 
  36.   } 
  37.  

ES6的新語法更加易懂。

注意:一定要在子類的構造方法里調用super()方法。否則報錯。

調用super類內容

  1. class ES6DetectiveConan extends ES6Detective { 
  2.   constructor() { 
  3.     super(); 
  4.     console.log('ES6DetectiveConan constructor'); 
  5.   } 
  6.  
  7.   solveCase(caseName) { 
  8.     super.solveCase(caseName); 
  9.  
  10.     if(!caseName) { 
  11.       console.log('CONAN no case to solve'); 
  12.     } else { 
  13.       console.log('CONAN case ' + caseName + ' is solved'); 
  14.     } 
  15.   } 
  16.  

靜態方法可以被繼承

ES6的靜態方法可以被繼承。ES5的不可以。

  1. class ES6Detective { 
  2.   static countCases(place) { 
  3.     let p = !place ? '[maybe]' : place; 
  4.     console.log(`Counting cases...solve in ${p}`); 
  5.   } 
  6.  
  7. class ES6DetectiveConan extends ES6Detective { 
  8.   constructor() { 
  9.     super(); 
  10.     console.log('ES6DetectiveConan constructor'); 
  11.   } 
  12.  
  13. // static method 
  14. ES6Detective.countCases(); 
  15. ES6DetectiveConan.countCases('Japan'); 
  16.  
  17. // result 
  18. Counting cases...solve in [maybe] 
  19. Counting cases...solve in Japan  

在子類ES6DetectiveConan并沒有定義任何方法,包括靜態方法。但是,在父類和子類里都可以調用該方法。

甚至,可以在子類里調用父類的靜態方法:

  1. class ES6DetectiveConan extends ES6Detective { 
  2.   static countCases(place) { 
  3.     let p = !place ? '[maybe]' : place; 
  4.     super.countCases(p); 
  5.     console.log(`#Sub class:- Counting cases...solve in ${p}`); 
  6.   } 
  7.  
  8. // result 
  9. Counting cases...solve in [maybe] 
  10. Counting cases...solve in Japan 
  11. #Sub class:- Counting cases...solve in Japan  

代碼

https://github.com/future-cha...

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2025-07-10 07:33:05

2024-04-16 08:08:54

DTC國產庫產品

2025-08-08 07:30:49

數據數據庫閃回

2012-09-11 11:29:25

2016-10-13 19:01:59

React NativUbuntu

2024-06-04 22:20:02

2021-11-18 08:55:49

共享CPU內存

2016-08-12 08:49:46

React NativFacebookNative

2017-09-11 14:35:34

編輯器開發環境React

2015-09-22 09:50:36

FacebookAndroid

2023-06-24 17:09:06

React前端

2024-07-08 00:00:07

2016-08-12 13:55:06

2021-03-31 08:33:17

SysTick定時器SysTick定時器

2023-06-12 07:00:40

Rust進度任務

2017-01-11 18:44:43

React Nativ觸摸事件Android

2017-01-04 10:18:00

React NativScrollViewAndroid

2016-08-15 13:34:37

React NativiOSjs入口

2024-01-19 09:03:06

ReactTypeScripFlexbox

2017-03-21 21:37:06

組件UI測試架構
點贊
收藏

51CTO技術棧公眾號

2024国产精品视频| 久久天堂电影| 国内精品久久久久久99蜜桃| 亚洲三级在线播放| 色88久久久久高潮综合影院| 九七伦理97伦理手机| 青青青青在线视频| 天天做天天爱天天爽综合网| 国产成人午夜精品5599| 日韩欧美电影一区| 久久另类ts人妖一区二区| 中文字幕国产精品久久| 性xxxx丰满孕妇xxxx另类| 久久这里只精品最新地址| 免费国产成人看片在线| 免费国产亚洲视频| 日韩久久在线| 日韩和欧美一区二区| 精品一区二区三区视频日产| 欧美亚洲不卡| 韩日午夜在线资源一区二区| 一本色道久久综合亚洲精品不| 国产精品视频福利| 亚洲日本成人| 欧美精品七区| 久久国产精品99精品国产 | 欧美日韩高清| 国产精品盗摄久久久| 国产精品嫩模av在线| 国产精品 欧美在线| 亚洲久久久久| 欧美日本韩国国产| 国产在线一区二区| 精品国产一二三四区| 国产精品毛片a∨一区二区三区| 一本免费视频| 欧美日本在线播放| 国产h片在线观看| 在线中文字幕日韩| 久久久久国产精品熟女影院| 欧美一区二区三区喷汁尤物| 日本高清中文字幕在线| 国产亚洲精品久久久久婷婷瑜伽| 欧美影院精品| 欧美日本亚洲视频| 日韩伦理一区| 成人午夜激情片| 欧美高清电影在线| 一区二区三区中文字幕精品精品| 51成人做爰www免费看网站| 国产精品白嫩初高中害羞小美女 | 日本在线视频不卡| 麻豆中文一区二区| 日韩中文字幕在线视频观看| 亚洲乱码一区二区三区在线观看| 岛国在线视频| 中文字幕精品av| 欧美亚洲国产一区| 亚洲国产精品日韩| 中文字幕在线不卡视频| 欧洲日本在线| 欧美日韩第一视频| 日韩亚洲在线| 午夜免费高清视频| 欧美日韩高清在线播放| 99精品国产九九国产精品| 96sao精品视频在线观看| 国产在线视频不卡二| 又黄又爽无遮挡| 亚洲欧美日韩久久久久久| 国产欧美日韩视频在线| 亚洲欧洲精品在线观看| 一二三区精品福利视频| 美女网站视频一区| 国产精品10p综合二区| 久久综合九色欧美综合狠狠| 思思99re6国产在线播放| 麻豆一区二区在线观看| 国产精品一二| 成人女性文胸| 亚洲免费av电影| 欧美日本不卡| 亚洲第一狼人区| 欧美日韩国产精选| 欧美综合精品| 国产欧美精品aaaaaa片| 欧美裸体一区二区三区| 久久av超碰| 69堂免费视频| 精品久久一区二区| 欧美码中文字幕在线| 性高湖久久久久久久久aaaaa| 欧美日韩高清不卡| 成人av动漫在线观看| 中文字幕欧美人妻精品一区| 亚洲欧美另类国产| 国产日韩1区| 免费黄色在线视频网站| 91国产美女在线观看| 成人三级在线视频| 午夜羞羞小视频在线观看| 成人国产精品免费视频| 欧美日韩伊人| 中文字幕在线精品| 经典三级在线一区| 中文字幕在线永久在线视频| 欧美成人vps| 日本精品视频一区二区三区| 欧美激情精品久久久六区热门| 久久av日韩| 成人h小游戏| 国产精品免费视频一区二区| 精品国产伦一区二区三区观看体验 | 欧美aa一级| 欧美成人milf| 粗大黑人巨茎大战欧美成人| 亚洲在线免费看| 国产综合色香蕉精品| 不卡影院免费观看| 色老头一区二区三区| eeuss在线观看| 国产理论在线播放| 日本一区二区在线免费播放| 最新亚洲国产| 日韩欧美成人网| 人人精品亚洲| 日韩精品一区二区三区不卡| 一区二区三区www| 国内成人精品2018免费看| 青春草视频在线观看| 欧美日韩国产综合视频在线| 欧美日韩一区精品| 天天做天天爱天天综合网2021 | 亚洲精品视频免费观看| av2020不卡| 亚洲一区二区高清视频| 精品国产一区二区在线观看| 视频一区在线播放| 精品视频在线一区二区| 中文字幕一区二区三区域| 久久久久国产视频| 91年精品国产| 久青草国产在线| 国产精品视频免费观看www| 噜噜噜91成人网| 免费在线播放电影| 国产精品网站免费| 91青青草免费观看| 国产精自产拍久久久久久| 亚洲欧美日韩国产中文| 精品国产乱码久久久久久婷婷| 国产精品mv在线观看| 麻豆免费在线观看| 精品一卡二卡三卡四卡日本乱码 | 99re66热这里只有精品4| 在线综合视频网站| 一区二区三区四区视频| 97se亚洲国产综合在线| 在线观看爽视频| 九色福利视频| www.黄色网址.com| 欧美精品videosex牲欧美| 亚洲精品免费看| 欧美日韩免费观看一区| 国产亚洲精品美女久久久久| 国产精品美女久久久| 国产精品免费播放| 狠狠干视频网站| 97视频在线观看视频免费视频 | 国产成人午夜视频网址| 精品国产欧美成人夜夜嗨| 欧美裸体一区二区三区| 欧美色道久久88综合亚洲精品| 亚洲色图第三页| 欧美精品福利视频| 美日韩精品免费| 久久久久久国产精品一区 | 成年人视频免费在线播放| 美女做暖暖视频免费在线观看全部网址91 | 国产精品视频一二三区| 国内精品嫩模av私拍在线观看| 久久爱www成人| 欧美专区18| 亚洲成国产人片在线观看| 国产精品乱码人人做人人爱| 国产精品99久久久久久久女警| 在线欧美不卡| 日韩在线观看一区二区三区| 国产精品69xx| 精品国产黄a∨片高清在线| 欧美国产先锋| 成人99免费视频| 日韩欧美在线影院| 日韩av免费在线播放| 午夜欧美一区二区三区免费观看| 免费黄色av电影| 激情亚洲影院在线观看| 亚洲综合影院| 五月综合激情| 91色婷婷久久久久合中文|