失败的尝试,使用继承扩展数组,以及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并不能做的更好。

程序,必须是优美的。

时间: 2024-10-18 09:46:05

失败的尝试,使用继承扩展数组,以及ES6的必要性的相关文章

哈希表--扩展数组

pre-situation: 当哈希表变得太满时候.一个选择是扩展数组. java中数组有固定大小.而且不能扩展.编程时.只能另外创建一个更新的更大的数组.然后把旧数组的所有内容插入 新数组当中. 注意: 哈希函数根据数组大小计算给定数据项的位置. 所以这些数据项不能再放在新数组中和原有数组相同的位置上. 因此不能简单地从一个数组向另一个数组拷贝数据. 扩展后的数组容量通常是原来的两倍.实际上.因为数组容量应该是一个质数. 所以新数组要比两倍的容量多一点.

从头认识java-7.5 怎样通过继承扩展接口?

我们这一章节来讨论一下怎样通过继承扩展接口. 接口跟类一样,具有继承的特性,但是他只是继承接口,不继承类. package com.ray.ch07; interface WhatPersonCanDo { void run(); void sleep(); } interface WhatSingerCanDo extends WhatPersonCanDo { void sing(); } class Singer implements WhatSingerCanDo { @Override

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

尝试使用wptree来进行xml解析,又一次失败了,可以正常读取正常输出,但是使用wptree进行节点读取失败(乱码) 请看源码: DealXml.h 1 #pragma once 2 3 #include <string> 4 5 #include <boost/property_tree/ptree.hpp> 6 7 struct TestData 8 { 9 int var_int; 10 std::string var_string; 11 std::wstring var

动态扩展数组长度(自定义)

动态扩展数组长度(自定义) 在Java中,创建的数组都是定长的,也就是数组一旦创建,长度就已经确定了,但是我们往往遇到要添加的元素个数,超出了数组的长度,这种情况如何处理了?接下来就介绍一种简单的思路去扩展数组的长度. 一.动态扩展数组的思路 1)定义一个数组.2)向数组中添加元素.3)当元素的个数超出了数组的长度的时候,则需要对数组进行动态的扩容4)再次新建一个数组,该数组的长度为第一步创建的数组长度基础上再增加50%(初始化数组长度为10,每次增加5).5)在创建完新的数组之后,一定要记得将

设计数组类扩展数组的功能

建立专门的数组类处理有关数组的操作 数组是几乎所支持的组织数据的方法.C和C++对数组类型提供了内置支持,使我们利用数组实现软件中需要的各种实用的功能.但是,这种支持仅限于用来读写单个元素的机制.C++不支持数组的抽象abstraction,也不支持对整个数组的操作.例如:把一个数组赋值给另外一个数组,对两个数组进行相等比较或者想知道数组的大小size,等等.对C++而言,数组是从C语言中继承来的,它反映了数据与对其进行操作的算法的分离,有浓厚的过程化程序设计的特征.数组并不是C++语言的一等公

ES6入门教程---数值扩展数组扩展和对象扩展

1.数值扩展 var num = 0b11; console.log(num);3 var num = 0o11;console.log(num);9 var num = 1.234; console.log(Math.trunc(num))//干掉小数点console.log(Math.sign(-0));//判断参数是正数.负数.正0还是负0 console.log(Math.hypot(3,4))//返回所有参数的平方和的平方根(勾股定理) 2.数组扩展 var str = 'xunian

Mac自己搭建爬虫搜索引擎(nutch+elasticsearch是失败的尝试,改用scrapy+elasticsearch)

1.引言 项目需要做爬虫并能提供个性化信息检索及推送,发现各种爬虫框架.其中比较吸引的是这个: Nutch+MongoDB+ElasticSearch+Kibana 搭建搜索引擎 E文原文在:http://www.aossama.com/search-engine-with-apache-nutch-mongodb-and-elasticsearch/ 考虑用docker把系统搭建起来测试: docker来源如下: https://www.elastic.co/guide/en/elastics

不吐不快和一次失败的尝试

一定要在工作日每天下班前,作总结,切记,切记. 上午,处理周六遗留下来的问题,听朱X贵爆料高层腐败,事儿觉得未来一片灰暗. 不论真假,这些恶,自己是万万不能做的,如果是为了钱和名,不要也罢. 昨晚看洛克菲勒自传,更加激励自己全身心投入到工作中去. 人生在世,草木一春,钱,名,女人带不进坟墓.望古今,能有发明.作品.思想传世,足矣. 杂活忙完,看了看linux的命令,尝试了一些新的命令,可能是我们设备的linux是经过了特殊的整理,导致一些命令失效. 但一时兴起,觉得应该设计一套文件命令和打包命令

javascript继承扩展类方法实现

javascript没有原生的继承语法,这确实很让人困惑,但是广大人民群从的智慧是无穷的.最近呢,正尝到一点从源码中学习的甜头,不分享一下实在难以平复激动的心情.前不久改造视频播放插件的时候,找到了videojs这个优秀的开源项目.经过一段时间深入学习它的源码,发现它的继承机制写的很好,而且短小精悍,于是决定把它拔离出来,做成一个单独的库,方便以后项目中使用. //定义一个命名空间 var xut = {}; /** * Core Object/Class for objects that us