我们都知道直接在原生对象上扩展对象是很不好的。所以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的必要性的更多相关文章

  1. odoo开发笔记 -- 搜索视图继承扩展

    odoo开发笔记 -- 搜索视图继承扩展

  2. JavaScript 继承和数组

    前言 因为篇幅比较短,所以将JavaScript中的继承和数组进行统一写. 继承 当一个函数对象被创建的时候,Function构造器产生的函数对象会运行类似这样的代码: this.prototype ...

  3. 一次失败的尝试hdfs的java客户端编写(在linux下使用eclipse)

    一次失败的尝试hdfs的java客户端编写(在linux下使用eclipse) 给centOS安装图形界面 GNOME桌面环境 https://blog.csdn.net/wh211212/artic ...

  4. JavaScript数组去重—ES6的两种方式

    说明 JavaScript数组去重这个问题,经常出现在面试题中,以前也写过一篇数组去重的文章,(JavaScript 数组去重的多种方法原理详解)但感觉代码还是有点不够简单,今天和大家再说两种方法,代 ...

  5. javascript_core_10之继承与数组API

    1.现有两对象间的继承:Object.setPrototypeOf(child,father): 2.基于现有父对象创建子对象:var child=Object.create(father,{新属性} ...

  6. Silverlight页面通过继承扩展实现

    在Silverlight中有些项目对UserControl重新做了封装基类,如PageBase,要求项目中每个页面都要从PageBase派生,但是过程比较坎坷,本文针对这个功能点的实现以及实现过程中遇 ...

  7. boost::xml————又一次失败的尝试

    尝试使用wptree来进行xml解析,又一次失败了,可以正常读取正常输出,但是使用wptree进行节点读取失败(乱码) 请看源码: DealXml.h #pragma once #include &l ...

  8. Python继承扩展内置类

    继承最有趣的应用是给内置类添加功能,在之前的Contact类中,我们将联系人添加到所有联系人的列表里,如果想通过名字来搜索,那么就可以在Contact类添加一个方法用于搜索,但是这种方法实际上属于列表 ...

  9. php url链接地址传数组方法 json_decode解析数组失败 经过url链接的json数组解析出错的解决方法 (原)

    先说出现的问题: 请求一个接口(例如  http://www.a.com/getmes.php)需要传一个数组参数 param ,值为 数组 array(0=>'刘师傅',1=>'1760 ...

随机推荐

  1. CSP

    CSP(Content-Security-Policy): 内容安全策略   作用: .限制资源获取 .报告资源获取越权   限制方式: .default-src限制全局 跟链接请求有关的东西,限制他 ...

  2. 【转】netstat 命令当中的内部地址和外部地址分别代表的是什么?

    RT,用自己的话解释,不要搬网上的内容.尽量可以简洁,谢谢 2015-03-07 17:41 提问者采纳   网络连接是有2方参与,自己就是“内部地址”,别人就是“外部地址”,就这么简洁. 再举个例子 ...

  3. Codeforces Round #361 (Div. 2) E. Mike and Geometry Problem 【逆元求组合数 && 离散化】

    任意门:http://codeforces.com/contest/689/problem/E E. Mike and Geometry Problem time limit per test 3 s ...

  4. fastJson简单实用

    public class FastJsonText { @Test public void text(){ User user1 = new User(); user1.setName("健 ...

  5. hyper-net、ion、skip connection、fpn

    resnet的skip connection用的也是eltwise相加 fpn的浅层和高层融合用的eltwise相加 hyper-net和ion都是使用的concat的方式 hyper-net网络结构 ...

  6. 【luogu P1082 同余方程】 题解

    最近一直在学习数论,讲得很快,害怕落实的不好,所以做一道luogu的同余方程练练手. 关于x的同余方程 ax ≡ 1 mod m 那么x其实就是求a关于m的乘法逆元 ax + my = 1 对于这个不 ...

  7. 【题解】UVA1218 Perfect Service

    UVA1218:https://www.luogu.org/problemnew/show/UVA1218 刷紫书DP题ing 思路 参考lrj紫书 不喜勿喷 d(u,0):u是服务器,孩子是不是服务 ...

  8. Android中得到布局文件对象有三种方式

    Android中得到布局文件对象有三种方式 第一种,通过Activity对象 View view = Activity对象.getLayoutInflater().inflater(R.layout. ...

  9. 移动端flex自适应方案。(px to rem)

    define(function (require, exports, module) { exports.mobileUtilMethod = function () { (function (e, ...

  10. 工作流,WEB框架,UI组件网络收集整理

    工作流,WEB框架,UI组件网络收集整理 在博客园上逛了好多年,随手收录了一些工作流,WEB开发框架,UI组件,现在整理一下与大家分享. 由于个人能力与精力有限,望各位园友在评论中补充,我将全部整理到 ...