返回顶部
首页 > 资讯 > 前端开发 > JavaScript >es6怎么解决因React Native出现的问题
  • 923
分享到

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

2024-04-02 19:04:59 923人浏览 独家记忆
摘要

这篇文章主要介绍“es6怎么解决因React Native出现的问题”,在日常操作中,相信很多人在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 #<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里定义,一是在构造函数重定义。在构造函数中定义的实例方法和属性在每一个实例中都会保留一份,而在原型中定义的实例方法和属性是全部实例只有一份。

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

--结束END--

本文标题: es6怎么解决因React Native出现的问题

本文链接: https://lsjlt.com/news/86284.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • es6怎么解决因React Native出现的问题
    这篇文章主要介绍“es6怎么解决因React Native出现的问题”,在日常操作中,相信很多人在es6怎么解决因React Native出现的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方...
    99+
    2024-04-02
  • React-Native如何解决键盘遮挡问题
    这篇文章主要介绍了React-Native如何解决键盘遮挡问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在开发中经常遇到需要输入的地方,...
    99+
    2024-04-02
  • 如何解决React Native端口号修改的问题
    这篇文章主要为大家展示了“如何解决React Native端口号修改的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决React Native端口号修...
    99+
    2024-04-02
  • 如何解决react-native WebView返回处理问题
    这篇文章主要介绍了如何解决react-native WebView返回处理问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.前言项目中有...
    99+
    2024-04-02
  • React Native断点调试 跨域资源加载出错问题的原因分析
    React Native断点调试时遇到跨域资源加载出错的问题可能有以下几个原因:1. 网络请求配置问题:React Native的网...
    99+
    2023-09-23
    React
  • React Native断点调试跨域资源加载出错问题的原因分析
    React Native 是一种用于构建移动应用的框架,它使用的是 JavaScript 和 React 的语法。在使用 React...
    99+
    2023-09-01
    原因
  • React Native:真机断点调试+跨域资源加载出错问题解决
    在React Native开发中,有时候我们需要在真机上进行断点调试来定位问题。本文将介绍如何在真机上进行断点调试,并解决跨域资源加...
    99+
    2023-09-06
    React Native
  • react跨域问题怎么解决
    在 React 中解决跨域问题通常有以下几种方法:1. 设置代理:在开发环境中,可以通过设置代理服务器来解决跨域问题。可以在 `pa...
    99+
    2023-08-19
    react
  • win10出现config.msi问题怎么解决
    要解决Windows 10中的config.msi问题,可以尝试以下方法: 重命名config.msi文件夹:首先,打开资源管理...
    99+
    2024-02-29
    win10
  • 怎么解决es6中import报错的问题
    这篇文章将为大家详细讲解有关怎么解决es6中import报错的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 es6 import报错的解...
    99+
    2024-04-02
  • 怎么解决React中的re-render问题
    这篇文章主要介绍“怎么解决React中的re-render问题”,在日常操作中,相信很多人在怎么解决React中的re-render问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决React中的re...
    99+
    2023-06-29
  • c#闭包出现的问题怎么解决
    在C#中,闭包可能会引发内存泄漏或者变量捕获不正确的问题,可以通过以下方法来解决: 手动解除闭包引用:在闭包中,确保不再需要引用...
    99+
    2024-04-02
  • react usestate异步问题怎么解决
    在React中,useState钩子是同步的,它不会自动处理异步操作。因此,当遇到需要在useState之后执行异步操作的情况时,可...
    99+
    2023-10-07
    react
  • win7 Ubuntu Grub出现问题怎么解决
    这期内容当中小编将会给大家带来有关win7 Ubuntu Grub出现问题怎么解决,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。重启,直接进入install Ubuntu,然后安装成功了。再重启。然后悲剧...
    99+
    2023-06-16
  • win11内核出现问题怎么解决
    本篇内容主要讲解“win11内核出现问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“win11内核出现问题怎么解决”吧!方法一:首先点开底部“开始菜单”然后在顶部搜索并打开“verif...
    99+
    2023-07-02
  • 使用jBuilder8出现问题怎么解决
    如果您在使用jBuilder8时遇到问题,可以尝试以下解决方案: 确保您的操作系统和Java版本与jBuilder8的要求兼容。...
    99+
    2023-10-28
    jBuilder8
  • navicat激活出现问题怎么解决
    navicat 激活问题解决方案:检查许可证密钥的正确性。确保 navicat 版本与许可证密钥匹配。重新安装 navicat 并删除指定文件夹。禁用防火墙和防病毒软件。若仍无法解决问题...
    99+
    2024-04-06
    navicat
  • cdn资源访问出现问题怎么解决
    cdn资源访问出现问题的解决步骤:检查HTTP和HTTPS访问是否出现问题,若只是HTTPS访问出现问题,则是cdn HTTPS的配置出错。如果HTTP和HTTPS都出现问题时,查看cdn的源站是否正常,可以通过绑定host测试源站的响应情...
    99+
    2024-04-02
  • vue中出现function () { [native code] }错误怎么解决
    本篇内容主要讲解“vue中出现function () { [native code] }错误怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习...
    99+
    2023-06-29
  • 解决出现secure_file_priv null的问题
    在mysql安装目录的my.ini文件中的[mysqld]添加secure_file_priv = ' ';然后以管理员身份运行cmd, 进入mysql/bin停止mysql服务ne...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作