【转载】写一个js库需要怎样的知识储备和技术程度?
链接:https://www.zhihu.com/question/30274750/answer/118846177
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
1.1 一个javascript库最好的实现方式是占用最少的命名空间,比如window对象上或者global对象上只占用一个引用。
1.2 健壮的js程序对输入都会有完善的类型检查和异常处理,边界值的判断。
1.3 对js的几种继承方式要足够了解,什么时候用原型继承,什么时候用拷贝继承,好处缺点,以及整个库中的类管理的统一。
1.4 用好的函数名和变量名代替多余的注释。
1.5 对浏览器和宿主环境的检查,nodejs比如os的检查,web端比如浏览器版本和型号的检测,检测又分为功能检测和版本检测等方法。
1.6 一样的代码不写第二次。
1.7 少用匿名函数。
1.8 整个库的生命周期定义要想好。
1.9 可读性的维护,比如dom元素都带$,局部变量和全局变量,常量,私有变量的使用,js的2条链,作用域和原型链的概念,统一的出入口,统一的流程控制,事件机制,适当的根据场景应用设计模式,我的建议是可读性优先于代码性能。
等等等等吧,这些都属于是工程类的问题,经验包吃多了 平时写代码都会注意。而健壮的javascript代码以上都是必须的,其实其他语言也适用,可以多看看重构,编写可维护的代码这一类的书。
2,什么是js库,一个开源的js库都包含哪些东西(不仅仅只有代码)。
如果是第一条是写js库的一个前提条件,那么这里说的是当你实现了功能之后,你的库里配套的还需要什么?
2.1 文档,这个不必说了,文档分2种,一种自动的jsdoc一类的,一种手工维护的API列表和说明。最后还应该附带最佳实践和例子。
2.2 测试用例,这里一般指单元测试,如果你的pr不通过单元测试,说明你影响了你修改部分的其他逻辑,这也是保证库健壮可用的必须条件。
2.3 demo,和文档类似,但是更贴近现实生活,就是说完整的使用场景。
2.4 自动化构建或者说项目维护的脚本,如果说一个库的功能很复杂,那么多代码如何最终构建给用户使用,内部一定要有一套机制来完善,比如dev比如build,有人用make有人用gulp,这部分的额外工作在很多js库都有体现。
2.5 依赖包的状态要告诉使用者,升级策略和开发版本与稳定版本的区别。
2.6 安装文档,或者提供云cdn资源。
2.7 完善的dev环境文档,这里很多开发者没有,导致你的项目只能你自己维护,很累,其他人想帮忙,在环境这一关就被拦下来了。
3,易用性,也就是要有一定的API设计能力,足够的代码抽象能力,也就是用户体验部分。
我在编写一些玩具库的时候,都是先设计API,先写实例初始化化的伪代码,调用方法的伪代码,在脑海里想一下 我怎么用这个库更舒服,设计好之后,再对库进行实现,当然也可以多参考其他框架库的方法命名,尊重用户习惯,可以多看看API设计一类的书,这一部分也是不区分语言的。
4,肯定要对算法和数据结构要有一定了解。
举一个最简单的例子,很多库里面的缓存策略是什么样子的?这里抛砖引玉,比如vue的缓存就用了https://github.com/rsms/js-lru 这个库,而这个库说白了就是Least Recently Used 近期最少使用算法,简称LRU,很多语言都有实现,你不了解不知道算法和数据结构,你怎么做最合适的取舍呢?
5,如果是说js库,那么配套的扩展机制也一定要提前设计好。
vue有全家桶,jquery有jq-ui,yui也有自己配套的一系列插件和扩展方法。当然如果你只是想写一些小巧的独立js库,最好把一些关键方法暴露出来让其他人可以方便在外部复写或者继承重写。否则遇到问题,别人就只能破坏你的源码了,这对开发使用者来说也是非常不友好的。
【转载】写一个js库需要怎样的知识储备和技术程度?的更多相关文章
- 从 0 到 1 到完美,写一个 js 库、node 库、前端组件库
之前讲了很多关于项目工程化.前端架构.前端构建等方面的技术,这次说说怎么写一个完美的第三方库. 1. 选择合适的规范来写代码 js 模块化的发展大致有这样一个过程 iife => commonj ...
- 用es6写一个分数库
es6发布后nodejs开始更新.最近写一些库发现新特性还是很好用的,于是回来写一个分数库练手. 对于es6本身 ... => 以及 array.includes 很简洁.class依然不是很顺 ...
- 让我们纯手写一个js继承吧
继承在前端逻辑操作中是比较常见的,今天我们就从零开始写一个js的继承方式 在es5中继承实质上是先创建子类的实例对象,然后再将父类的方法添加到this上Parent.call(this),在es6中则 ...
- 如何手写一个js工具库?同时发布到npm上
自从工作以来,写项目的时候经常需要手写一些方法和引入一些js库 JS基础又十分重要,于是就萌生出自己创建一个JS工具库并发布到npm上的想法 于是就创建了一个名为learnjts的项目,在空余时间也写 ...
- 前端与编译原理——用JS写一个JS解释器
说起编译原理,印象往往只停留在本科时那些枯燥的课程和晦涩的概念.作为前端开发者,编译原理似乎离我们很远,对它的理解很可能仅仅局限于"抽象语法树(AST)".但这仅仅是个开头而已.编 ...
- 如何写一个Js上传图片插件。
项目里面需要一个上传图片的插件,找了半天没有找到满意的,算了 不找了,自己写一个吧,顺便复习一下js方面的知识.完成之后效果还不错,当然还要继续优化,源码在最后. 介绍一种常见的js插件的写法 ; ( ...
- typescript+webpack构建一个js库
依赖说明 入口文件 tsconfig配置 webpack配置文件 webpack入口文件配置 webpack为typescript和less文件配置各自的loader webpack的output配置 ...
- 自己写一个JS单向数据流动库----one way binding
JS单向流动其实就是数据到视图的过程, 这几天突发奇想,想着弄一个插件, 把DOM结构使用JS进行描述: 因为DOM中的Class , content, id, attribute, 事件, 子元素全 ...
- 写一个js向左滑动删除 交互特效的插件——Html5 touchmove
需求描述 需要实现类似QQ中对联系人的操作:向左滑动,滑出删除按钮.滑动超过一半时松开则自动滑到底,不到一半时松开则返回原处. 纯js实现 使用了h5的touchmove等事件,以及用js动态改变cs ...
随机推荐
- Markdown与标记语言
Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷惑,Markdown 的语法十分简单.常用的标记符号也不 ...
- UP Board USB无线网卡一贴通
前言 原创文章,转载引用务必注明链接,水平有限,欢迎指正. 本文环境:ubilinux 3.0 kernel 4.4.0 本文使用Markdown写成,为获得更好的阅读体验和正常的图片.链接,请访问我 ...
- python发送邮件
python发送邮件(无附件) ======================================================= #!/usr/bin/env python#coding ...
- PHP 文件限速下载代码
php 文件限速下载代码 <?php include("DBDA.class.php"); $db = new DBDA(); $bs = $_SERVER["QU ...
- Oracle 删除重复数据只留一条
查询及删除重复记录的SQL语句 1.查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where Id in (select Id from 表 g ...
- 将JAR包反编译,修改后重新打包(转)
将JAR包反编译,修改后重新打包(转) 在学习和开发JAVA项目中,我们经常会用到第三方提供的一些jar.使用这些第三方工具包,可以提高我们开发的效率,缩短开发的时间.有的第三方工具,提供具体的 ...
- HiHo Coder字典树 TrieTree
题目地址:http://hihocoder.com/problemset/problem/1014 不得不吐槽一下这个OJ,题目质量是很好的,但是提交代码后返回的信息也太少了吧!!!本机测试无误,提交 ...
- jvm--2.类加载机制
3.JVM类加载机制 (1)类加载机制 虚拟机把描述类的数据从Class文件,用ClassLoader ,加载到内存,并对数据进行校验.转换解析和初始化,最终形成虚拟机直接使用的java类型, 这就是 ...
- TCP/IP模型详解
上述为TCP/IP的协议模型,主机到网络层又被称为网络接口层,网络互联层又被称为网间层. 网络接口层:实际上,TCP/IP参考模型并没有真正描述这一层的实现,只是要求能够提供给其上层一个访问接口,以便 ...
- Object类和常用方法
Object类是java语言的根类,要么是一个类的直接父类,要么就是一个类的间接父类.所有对象(包括数组)都实现这个类的方法. 引用数据类型:类/接口/数组,引用数据类型又称之位对象类,所谓的数组变量 ...