千家信息网

es6怎么解决因React Native出现的问题

发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,这篇文章主要介绍"es6怎么解决因React Native出现的问题",在日常操作中,相信很多人在es6怎么解决因React Native出现的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的
千家信息网最后更新 2025年01月17日es6怎么解决因React Native出现的问题

这篇文章主要介绍"es6怎么解决因React Native出现的问题",在日常操作中,相信很多人在es6怎么解决因React Native出现的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"es6怎么解决因React Native出现的问题"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

构造函数

定义侦探类作为例子。

ES5的"类"是如何定义的。

function ES5Detective() {   console.log('##ES5Detective contructor'); }

ES6定义类:

class ES6Detective {   constructor() {     console.log('Detective constructor');   } }

ES6使用了class关键字,而且有专门的constructor。ES5里的function ES5Detective既是类的定义,也是构造函数。

属性

看看这个侦探是从哪本书出来的。

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而赋值的话就会出现下面的错误:

detective.bookAuthor = 'A C';                      ^  TypeError: Cannot set property bookAuthor of # 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里定义,一是在构造函数重定义。在构造函数中定义的实例方法和属性在每一个实例中都会保留一份,而在原型中定义的实例方法和属性是全部实例只有一份。

另外,在ES5的构造函数重定义的实例方法可以访问类的私有变量。比如:

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) {  ^

静态方法

ES5:

ES5Detective.countCases = function(count) {   if(!count) {     console.log('no case solved');   } else {     console.log(`${count} cases are solved`);   } };

类名后直接定义方法,这个方法就是静态方法。

ES5Detective.countCases();

ES6:

class ES6Detective {   static countCases() {     console.log(`Counting cases...`);   } }  // call it ES6Detective.countCases();

继承

ES6使用extends关键字实现继承。

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继承的时候需要注意两个地方:

  1. 需要在子类的构造函数里调用SuperClass.call(this[, arg1, arg2, ...])

  2. 子类的prototype赋值为:SubClass.prototype = Object.create(SuperClass.prototype),然后把构造函数重新指向自己的: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的新语法更加易懂。

注意:一定要在子类的构造方法里调用super()方法。否则报错。

调用super类内容

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');     }   } }

静态方法可以被继承

ES6的静态方法可以被继承。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并没有定义任何方法,包括静态方法。但是,在父类和子类里都可以调用该方法。

甚至,可以在子类里调用父类的静态方法:

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出现的问题"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

方法 实例 函数 子类 静态 问题 属性 学习 侦探 关键 关键字 只有 时候 是在 更多 帮助 实用 接下来 两个 例子 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 行业网络安全顶层设计情况 绍兴网络安全准入控制系统公司 dell t630服务器显卡 胶州市安康信网络技术服务中心 网络安全工程师混在黑白之间 软件开发工程师前景 宾馆无线网络安全吗 数据库主键构成题目 山东广电公司网络安全研究院 河南彬焕网络技术有限公司 深圳光合微度软件开发 进行校园网络安全教育的目的 网络存储服务器怎么用 计算机网络技术国际版 幼儿园防电信网络安全教育文案 服务器远程部署网心云 ocp数据库考试问题 网络安全的高管 大华平台服务器能兼容多个ip吗 将表情存到数据库 开视频监控网络安全受威胁 服务器出现信号不稳定 三级网络技术需要什么基础 老夫少妻小说软件开发 徐州网络营销软件开发售后服务 网络技术与它对应的应用 数据库的编译器怎么添加 有关网络安全能提问什么 金蝶服务器需要定时重启吗 infomix 数据库比较
0