【转载】写一个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 ...
随机推荐
- GUI学习中错误Exception in thread "main" java.lang.NullPointerException
运行时出现错误:Exception in thread "main" java.lang.NullPointerException 该问题多半是由于用到的某个对象只进行了声明,而没 ...
- js cookie
cookie:cookis:储存数据,当用户访问了某个网站的时候,我们就可以通过cookie来向访问者电脑上储存数据1)不同浏览器的存放cookie位置不一样,也是不能通用的2)cookie的存储是以 ...
- hibernate+mysql的连接池配置
1:连接池的必知概念 首先,我们还是老套的讲讲连接池的基本概念,概念理解清楚了,我们也知道后面是怎么回事了. 以前我们程序连接数据库的时候,每一次连接数据库都要一个连接,用完后再释放.如果频繁的 ...
- JS 工具类
之前工作用的JavaScript比较多,总结了一下工具类,和大家分享一下,有不足之处还请多多见谅!! 1. 数组工具类(arrayUtils) var arrayUtils = {}; (functi ...
- Rss 订阅:php动态生成xml格式的rss文件
Rss 简介: 简易信息聚合(也 叫聚合内容)是一种描述和同步网站内容的格式.使用RSS订阅能更快地获取信息,网站提供RSS输出,有利于让用户获取网站内容的最新更新.网络用户可以在客户端借助于支持RS ...
- Javascript操作DOM常用API总结
基本概念 在讲解操作DOM的api之前,首先我们来复习一下一些基本概念,这些概念是掌握api的关键,必须理解它们. Node类型 DOM1级定义了一个Node接口,该接口由DOM中所有节点类型实现.这 ...
- highcharts饼状图使用案例
在公司由于需要对订单数据进行分析,故使用到了highcharts工具 <block name="Js"> <script type="text/java ...
- iOS动态部署之RSA加密传输Patch补丁
概要:这一篇博客主要说明下iOS客户端动态部署方案中,patch(补丁)是如何比较安全的加载到客户端中. 在整个过程中,需要使用RSA来加密(你可以选择其它的非对称加密算法),MD5来做校验(同样,你 ...
- 百度CDN
地址如下: http://cdn.code.baidu.com/
- Markdown 语法简要介绍
=================MarkDown================= Markdown 是一种方便记忆.书写的纯文本标记语言,用户可以使用这些标记符号以最小的输入代价生成极富表现力的文 ...