這篇文章主要介紹“es6怎么解決因React Native出現(xiàn)的問題”,在日常操作中,相信很多人在es6怎么解決因React Native出現(xiàn)的問題問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”es6怎么解決因React Native出現(xiàn)的問題”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,績溪企業(yè)網(wǎng)站建設,績溪品牌網(wǎng)站建設,網(wǎng)站定制,績溪網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,績溪網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
構造函數(shù)
定義偵探類作為例子。
ES5的“類”是如何定義的。
function ES5Detective() { console.log('##ES5Detective contructor'); }
ES6定義類:
class ES6Detective { constructor() { console.log('Detective constructor'); } }
ES6使用了class關鍵字,而且有專門的constructor。ES5里的function ES5Detective既是類的定義,也是構造函數(shù)。
屬性
看看這個偵探是從哪本書出來的。
ES5:
ES5Detective.prototype.fromBookName = 'who';
ES6:
class ES6Detective { detectiveName: string; _bookName: string; constructor() { console.log('Detective constructor'); this.detectiveName = 'Detective who'; // 屬性 } }
ES6 getter & setter
class ES6Detective { detectiveName: string; _bookName: string; constructor() { console.log('Detective constructor'); this.detectiveName = 'Detective who'; this._bookName = 'who'; } get fromBookName() { return this._bookName; } set fromBookName(value) { this._bookName = value; } }
如果只有getter沒有setter而賦值的話就會出現(xiàn)下面的錯誤:
detective.bookAuthor = 'A C'; ^ TypeError: Cannot set property bookAuthor of #<ES6Detective> which has only a getter
實例方法
偵探是如何解決案件的。
ES5:
ES5Detective.prototype.solveCase = function(caseName) { var dn = this.dectiveName; if(!caseName) { console.log('SOLVE CASE: ' + dn + ' no case to solve'); } else { console.log('SOLVE CASE: ' + dn + ' get case ' + caseName + ' is solved'); } };
或者:
function ES5Detective() { this.dectiveName = 'Detective who'; console.log('##ES5Detective contructor'); // 實例方法 this.investigate = function(scene) { console.log('investigate ' + scene); } this.assistant = "assistant who"; }
ES6:
class ES6Detective { detectiveName: string; _bookName: string; constructor() { console.log('Detective constructor'); this.detectiveName = 'Detective who'; this._bookName = 'who'; } solveCase(caseName) { if(!caseName) { console.log('no case to solve'); } else { console.log('case ' + caseName + ' is solved'); } } }
ES6添加方法非常簡單直接。ES5中添加實例方法有兩種方法,一是在prototype里定義,一是在構造函數(shù)重定義。在構造函數(shù)中定義的實例方法和屬性在每一個實例中都會保留一份,而在原型中定義的實例方法和屬性是全部實例只有一份。
另外,在ES5的構造函數(shù)重定義的實例方法可以訪問類的私有變量。比如:
function ES5Detective() { console.log('##ES5Detective contructor'); var available: boolean = true; // private field. default income is ZERO. this.investigate = function(scene) { if (available) { console.log('investigate ' + scene); } else { console.log(`i'm not available`); } } }
在其他的方法訪問的時候就會報錯。
if (!available) { ^
靜態(tài)方法
ES5:
ES5Detective.countCases = function(count) { if(!count) { console.log('no case solved'); } else { console.log(`${count} cases are solved`); } };
類名后直接定義方法,這個方法就是靜態(tài)方法。
ES5Detective.countCases();
ES6:
class ES6Detective { static countCases() { console.log(`Counting cases...`); } } // call it ES6Detective.countCases();
繼承
ES6使用extends關鍵字實現(xiàn)繼承。
ES5:
function ES5Detective() { var available: boolean = true; // private field. this.dectiveName = 'Detective who'; console.log('##ES5Detective contructor'); this.investigate = function(scene) { // 略 } this.assistant = "assistant who"; } ES5Detective.prototype.solveCase = function(caseName) { // 略 } // inheritance function ES5DetectiveConan() { // first line in constructor method is a must!!! ES5Detective.call(this); this.dectiveName = 'Conan'; } // inheritance ES5DetectiveConan.prototype = Object.create(ES5Detective.prototype); ES5DetectiveConan.prototype.constructor = ES5DetectiveConan;
ES5繼承的時候需要注意兩個地方:
需要在子類的構造函數(shù)里調(diào)用SuperClass.call(this[, arg1, arg2, ...])
子類的prototype賦值為:SubClass.prototype = Object.create(SuperClass.prototype),然后把構造函數(shù)重新指向自己的:SubClass.prototpye.constructor = SubClass。
ES6:
class ES6Detective { constructor() { console.log('Detective constructor'); this.detectiveName = 'Detective who'; this._bookName = 'who'; } solveCase(caseName) { if(!caseName) { console.log('no case to solve'); } else { console.log('case ' + caseName + ' is solved'); } } get fromBookName() { return this._bookName; } set fromBookName(value) { this._bookName = value; } get bookAuthor() { return 'Author Who'; } static countCases() { console.log(`Counting cases...`); } } class ES6DetectiveConan extends ES6Detective { constructor() { super(); console.log('ES6DetectiveConan constructor'); } }
ES6的新語法更加易懂。
注意:一定要在子類的構造方法里調(diào)用super()方法。否則報錯。
調(diào)用super類內(nèi)容
class ES6DetectiveConan extends ES6Detective { constructor() { super(); console.log('ES6DetectiveConan constructor'); } solveCase(caseName) { super.solveCase(caseName); if(!caseName) { console.log('CONAN no case to solve'); } else { console.log('CONAN case ' + caseName + ' is solved'); } } }
靜態(tài)方法可以被繼承
ES6的靜態(tài)方法可以被繼承。ES5的不可以。
class ES6Detective { static countCases(place) { let p = !place ? '[maybe]' : place; console.log(`Counting cases...solve in ${p}`); } } class ES6DetectiveConan extends ES6Detective { constructor() { super(); console.log('ES6DetectiveConan constructor'); } } // static method ES6Detective.countCases(); ES6DetectiveConan.countCases('Japan'); // result Counting cases...solve in [maybe] Counting cases...solve in Japan
在子類ES6DetectiveConan并沒有定義任何方法,包括靜態(tài)方法。但是,在父類和子類里都可以調(diào)用該方法。
甚至,可以在子類里調(diào)用父類的靜態(tài)方法:
class ES6DetectiveConan extends ES6Detective { static countCases(place) { let p = !place ? '[maybe]' : place; super.countCases(p); console.log(`#Sub class:- Counting cases...solve in ${p}`); } } // result Counting cases...solve in [maybe] Counting cases...solve in Japan #Sub class:- Counting cases...solve in Japan
到此,關于“es6怎么解決因React Native出現(xiàn)的問題”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
網(wǎng)頁標題:es6怎么解決因ReactNative出現(xiàn)的問題
鏈接地址:http://m.newbst.com/article46/gciehg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供自適應網(wǎng)站、關鍵詞優(yōu)化、ChatGPT、用戶體驗、Google、App設計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)