0

0

ES6新特性开发微信小程序(10)

迷茫

迷茫

发布时间:2017-03-25 17:36:08

|

1955人浏览过

|

来源于php中文网

原创

可子类化的内建对象(Subclassable Built-ins)

在ES6中,像Array,Date和Dom元素这样的内建对象都可以被子类化。

ES6新特性开发微信小程序(10)

通过子类工厂实现简单的合成器(Simple mixins via subclass factories)

mixin在javascript里可以看作是一种从别的对象"借用"功能的方法。每一个新定义的对象都有一个 prototype属性,其他的对象就可以从这里"借用"功能。这里的功能可以是一个属性,也可以是一个方法。

Mixin支持在一个系统中降解功能的重复性,增加功能的重用性。在一些应用程序也许需要在所有的对象实体共享行为的地方,我们能够通过在一个Mixin中维护这个共享的功能,来很容易的避免任何重复,而因此专注于只实现我们系统中真正彼此不同的功能。

在 ES6 中,我们可以采用全新的基于类继承的 “mixin” 模式设计更优雅的“语义化”接口,这是因为 ES6 中的 extends 可以继承动态构造的类,这一点和其他的静态声明类的编程语言不同。当 ES6 类继承另一个类,被继承的类可以是通过任意表达式创建的动态类。这个特性可以允许实现一种合成器模式,用一个函数来将一个类 C 映射到一个新的继承了C的类。

mixin 式继承的基本形式:

ES6新特性开发微信小程序(10)

用 mixin 实现 Serilizable

ES6新特性开发微信小程序(10)

ES6新特性开发微信小程序(10)

ES6新特性开发微信小程序(10)

极限网络办公Office Automation
极限网络办公Office Automation

专为中小型企业定制的网络办公软件,富有竞争力的十大特性: 1、独创 web服务器、数据库和应用程序全部自动傻瓜安装,建立企业信息中枢 只需3分钟。 2、客户机无需安装专用软件,使用浏览器即可实现全球办公。 3、集成Internet邮件管理组件,提供web方式的远程邮件服务。 4、集成语音会议组件,节省长途话费开支。 5、集成手机短信组件,重要信息可直接发送到员工手机。 6、集成网络硬

下载

上面的代码,我们用 ES6 的类继承实现了 Serializable,它检查当前实例的类上是否有定义 stringify 和 parse 静态方法,如果有,使用静态方法重写 toString 方法,如果没有,则在实例化对象的时候抛出一个异常。然后通过 class Employ extends Serializable(Person) 来实现可序列化,在这里我们没有可序列化 Person 本身,而将 Serializable 在语义上变成一种修饰,即 Employee 是一种可序列化的 Person。

使用weakmaps实现私有实例成员(Private instance members with weakmaps)

Weakmaps解决了私有数据成员的遗留问题。首先,再也没有必自己生成一个唯一的ID了,因为该对象实例本身就是一个唯一ID。其次,当一个对象实例被垃圾回收,绑到该实例中的weakmap中所有数据也会被回收。

ES6新特性开发微信小程序(10)

privateData在这个例子中是一个WeakMap的实例 。当一个新的Shape被创建时,一个weakmap的条目会被创建用来以便该实例来保存包含私有数据的对象。在weakmap中最关键的是this ,即使对于开发者来说获取一个Shape对象的引用是微不足道的一件事,他们也无法从实例外来访问到privateData,所以,数据被从麻烦制造者手中安全保护了。任何想要操纵私有数据的方法只能够通过传入实例的this ,从而拿到返回的对象。在这个例子中, getName()会获取对象并返回name属性的值。

尾调用优化(Tail-call optimization)

尾调用(Tail Call)是函数式编程的一个重要概念,是指某个函数的最后一步是调用另一个函数。

尾调用优化是为了避免不断保留和创建新的调用栈,而在函数最后一步调用另一个函数。最后一步的意义就在于:不需要保留当前函数的执行环境,在调用的下一个函数执行完毕并给出返回值后,直接再返回,类似于pipe。

函数调用自身,称为递归。如果尾调用自身,就称为尾递归。尾递归(Tail-recursion)就是利用尾调优化的特性,从语言机制上进行递归操作的优化,防止堆栈溢出(stack overflow)。

"尾调用优化"对递归操作意义重大,所以一些函数式编程语言将其写入了语言规格。ES6也是如此,第一次明确规定,所有 ECMAScript 的实现,都必须部署"尾调用优化"。这就是说,在 ES6 中,只要使用尾递归,就不会发生栈溢出,相对节省内存。

递归非常耗费内存,因为需要同时保存成千上百个调用帧,很容易发生“栈溢出”错误(stack overflow)。但对于尾递归来说,由于只存在一个调用帧,所以永远不会发生“栈溢出”错误。

下面代码是一个阶乘函数,计算n的阶乘,最多需要保存n个调用记录,复杂度 O(n)

ES6新特性开发微信小程序(10)

如果改成尾递归调用,只保留一个调用记录,复杂度 O(1)

ES6新特性开发微信小程序(10)

计算fibonacci数列,能充分说明尾递归优化的重要性

ES6新特性开发微信小程序(10)

使用尾递归优化过的fibonacci 递归算法

ES6新特性开发微信小程序(10)

自定义错误类(Custom Errors)

Error是JavaScript中的错误类,它同时也是一个构造函数,可以用来创建一个错误对象。Error实例会在发生运行进错误时抛出,Error像其它对象一样,也可以由用户自定义创建。

ES6通过派生实现自定义错误类

ES6新特性开发微信小程序(10)

相关文章

微信app下载
微信app下载

微信是一款手机通信软件,支持通过手机网络发送语音短信、视频、图片和文字。微信可以单聊及群聊,还能根据地理位置找到附近的人,带给大家全新的移动沟通体验,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

0

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

12

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

86

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

109

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

155

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

79

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

44

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

20

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

133

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 12.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号