【转载】写一个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 ...
随机推荐
- Android SDK NDK开发总结
描述:http://talent.baidu.com/external/baidu/index.html#/jobDetail/2/1237247043 android studio实现Jni(C/C ...
- hg0088新2网址:已经做好了封装直接拿来就能用功能齐全
很简单,InkCanvas就不用多介绍了,它是一个面板,特点是你可以在它上面涂抹,就像大街上那些妖怪那样,把化妆品往脸上乱涂,涂得人不像人,鸡不像鸡. InkToolBar呢是一个现成的工具栏,你可以 ...
- 初学Vue2.0--基础篇
概述: 鉴于本人初学,使用的编译器是webStorm,需添加对VUE的支持,添加方法可以参考 http://www.jianshu.com/p/142dae4f8b51. 起步: 1. 扎实的 Jav ...
- IScroll5兼容IE修改
水平不到家,无法像js大神那样讲得头头是道.仅做记录,以备后查. iScroll5是不兼容IE低版本的.为兼容IE低版本(以IE8为例),需做以下工作: 1.事件绑定方式兼容 众所周知,独特的IE有它 ...
- 引用js或css后加?v= 版本号的用法
<span style="font-size:14px;">css和js带参数(形如.css?v=与.js?v= 或 .css?version=与.js?version ...
- PHP图片加文字水印和图片水印方法(鉴于李老师博客因没加水印被盗,特搜集的办法。希望能有用!)
$dst_path = 'dst.jpg'; //创建图片的实例 $dst = imagecreatefromstring(file_get_contents($dst_path)); //打上文字 ...
- 微软压力测试工具 web application stress
转自 http://www.cnblogs.com/tonykan/p/3514749.html lbimba 铜牌会员 这里给广大的煤油推荐一个web网站压力测试工具.它可以用来模拟多个用户操作网 ...
- TCPIP、Http、Socket的协议~ 写得挺形象,赞
这篇文章写得挺形象,对TCPIP.HTTP.Socket的作用有一个整体层次的理解. 转载文章内容如下: 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 通过初步的了 ...
- leetcode--Majority Element
题目链接:https://leetcode.com/problems/majority-element/ 算法类型:分治法 题目分析:获取长度为n的数组中的众数(出现次数大于等于⌊ n/2 ⌋) 代码 ...
- Hadoop基础——第一弹:Hadoop介绍
一.基础 1.了解Java.Linux操作系统相关知识 2.如需精进,应为水平要达到一定标准,能够阅读国外相关技术网站,eg:http://hadoop.apache.org/ 二.什么是Hadoop ...