失败的尝试,使用继承扩展数组,以及ES6的必要性
我们都知道直接在原生对象上扩展对象是很不好的。所以prototype这样的库广受非议。
一些库,比如lodash采用了工具包形式的扩展方式,绕开了对象的继承。
由于es6的class的出现,我尝试以Array派生子对象的方式进行扩展。
以下是一个简单的例子。
"use strict"
class Abc extends Array{
getarray(){
return this;
}
}
let x=new Abc(5).fill(1);
console.log(x.getarray());
在v8中,这个例子是会输出正确结果[1,1,1,1,1]的。
尔后为了兼容其它浏览器,我尝试使用babel.js转码为es5。
但是这一步无论怎么样都没有成功。
最后我进入babel的官方讨论组才知道这是不被支持的。
loganfsmyth给出一个写法
class ExtendableArray {
constructor(...args){
const arr = new Array(...args);
Object.setPrototypeOf(arr, this.constructor.prototype);
return arr;
}
}
但是很显然,instanceof 以及Array.isArray 等语句都会有问题。
因此,现阶段并不存在完美的替代方案。
很多人都说,es6中的很多东西是语法糖。
不错,确实如此。
但是作为脚本语言,越精炼的脚本,扫描速度就会更快,压缩器的性能潜力也会提升。
冗长的语法从来就没有实质的意义,需要的,更多是书写形式的工整。
es6的诸多特性大多对这几点都有帮助。
模块的出现统一了目前繁杂的加载方式。
一系列异步语句的提出解决了回调地狱。
类的提出简化了继承过程。
更多的基础数据结构优化了数据处理性能。
虽然如果不考虑效率,es6能做到的,es5大多也能做到。
但是es5并不能做的更好。
程序,必须是优美的。
失败的尝试,使用继承扩展数组,以及ES6的必要性的更多相关文章
- odoo开发笔记 -- 搜索视图继承扩展
odoo开发笔记 -- 搜索视图继承扩展
- JavaScript 继承和数组
前言 因为篇幅比较短,所以将JavaScript中的继承和数组进行统一写. 继承 当一个函数对象被创建的时候,Function构造器产生的函数对象会运行类似这样的代码: this.prototype ...
- 一次失败的尝试hdfs的java客户端编写(在linux下使用eclipse)
一次失败的尝试hdfs的java客户端编写(在linux下使用eclipse) 给centOS安装图形界面 GNOME桌面环境 https://blog.csdn.net/wh211212/artic ...
- JavaScript数组去重—ES6的两种方式
说明 JavaScript数组去重这个问题,经常出现在面试题中,以前也写过一篇数组去重的文章,(JavaScript 数组去重的多种方法原理详解)但感觉代码还是有点不够简单,今天和大家再说两种方法,代 ...
- javascript_core_10之继承与数组API
1.现有两对象间的继承:Object.setPrototypeOf(child,father): 2.基于现有父对象创建子对象:var child=Object.create(father,{新属性} ...
- Silverlight页面通过继承扩展实现
在Silverlight中有些项目对UserControl重新做了封装基类,如PageBase,要求项目中每个页面都要从PageBase派生,但是过程比较坎坷,本文针对这个功能点的实现以及实现过程中遇 ...
- boost::xml————又一次失败的尝试
尝试使用wptree来进行xml解析,又一次失败了,可以正常读取正常输出,但是使用wptree进行节点读取失败(乱码) 请看源码: DealXml.h #pragma once #include &l ...
- Python继承扩展内置类
继承最有趣的应用是给内置类添加功能,在之前的Contact类中,我们将联系人添加到所有联系人的列表里,如果想通过名字来搜索,那么就可以在Contact类添加一个方法用于搜索,但是这种方法实际上属于列表 ...
- php url链接地址传数组方法 json_decode解析数组失败 经过url链接的json数组解析出错的解决方法 (原)
先说出现的问题: 请求一个接口(例如 http://www.a.com/getmes.php)需要传一个数组参数 param ,值为 数组 array(0=>'刘师傅',1=>'1760 ...
随机推荐
- POJ 3764 The xor-longest Path 【01字典树&&求路径最大异或和&&YY】
题目传送门:http://poj.org/problem?id=3764 The xor-longest Path Time Limit: 2000MS Memory Limit: 65536K ...
- JavaScript常见的内存泄漏原因
JavaScript 的垃圾收集机制 javascript具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中的使用的内存.而在C和C++之类的语言中,开发人员的一项基本任务就是手动跟踪内 ...
- 课时70.id选择器和类选择器(理解)
1.id和class的区别? id相当于人的身份证不可以重复 class相当于人的名称可以重复 1.2 一个HTML标签只能绑定一个id名称 一个HTML标签可以绑定多个class名称 2.id选择器 ...
- Centos6.9 安装Oracle11gR2
最近在学习怎么安装Centos,在Centos6.9版本安装Oracle数据库.参考了网络上很多文章,终于可以不报错的完成安装了,在这里记录一下 一.需要用到的安装文件 Centos6.9 ps: ...
- chsh 设置用户禁止登陆
chsh username -s /sbin/nologin ##禁止登陆 chsh username -s /bin/bash ##允许登陆
- Beginning DirectX11 Game Programming
DirectX11 or 10 made a big change comparing to DirectX9 The fixed-function pipeline was removed in D ...
- Less 常用基础知识
LESS 中的注释 也可以额使用css 中的注释(/**/) 这种方式是可以被编译出来的. 也可以使用// 注释 不会被编译的 变量 声明变量的话一定要用@开头 例如:@变量名称:值: @test_w ...
- baidu 地图 鼠标移上显示标签 鼠标离开隐藏标签
为了解决 label太多,文字会重叠看不清 所以提出这种办法 核心代码 1,创建的时候 将label设置为隐藏 2,通过百度地图监听事件 , mouseover或onmouseover 触发显示 3 ...
- 通过命令在navicat中创建数据库及表结构
方法/步骤 首先我们双击打开[navicat]这款软件,在菜单栏中选择[文件]-->[新建连接]-->[MySQL]: 步骤阅读 在打开的[新建连接]对话框中输入[连接名]和[ ...
- BGP映射和联盟
BGP映射和联盟 一:请看下面四张有关于BGP映射和联盟的拓扑图 BGP联盟 BGP映射实例 BGP单映射 BGP多映射 二:以图一为列,进行BGP联盟的配置测试: 首先进行理论分析,在拓扑图中共用两 ...