JavaScript的API设计原则是什么?竟然还有这些,简直不敢相信!

这篇博闻来源于一次企业內部的前面共享,从好几个层面探讨了在设计方案接口时的标准,一共包括了块状。下面大家来一起看一下吧!
一、接口的流畅性
好的接口是顺畅通俗易懂的,他关键反映以下好多个层面:
1.简易
实际操作某一原素的css属性,下边是原生态的方法:
document.querySelectorAll('#id').style.color='red';
封裝以后
functiona(selector,color){
document.querySelectorAll(selector)[0].style.color=color
}
a('#a','red');
从几十个英文字母细细长长一行到很简单的一个函数启用,展现了api简易实用
2.可阅读文章性
a(‘#a’,
‘red’)是个好函数,协助大家简易好用地更改某一原素,但那么问题来了,假如***次应用改函数的人而言会较为疑惑,a函数是什么函数,没人对他说。开发设计接口必须了解一点,人全是懒散的,从色调取值这一函数而言,尽管少写了代码,可是提升了记忆力成本费。每一次做这一件事儿的情况下都必须 有投射关联。
a—->color.如果是简易的好多个不在乎,可是一般一套架构都是有几十乃至几百的api,投射成本上升会促使程序猿亲哥哥奔溃。
大家必须 的便是促使接口更有意义,下边大家改变一下a函数:
functionletSomeElementChangeColor(selector,color){
document.querySelectorAll(selector,color);
}
letSomeElementChangeColor相对性于a而言被授予了语言表达实际意义,所有人都是会了解它的实际意义
3.降低记忆力成本费
大家刚的函数也是那样的它太长了letSomeElementChangeColor尽管降低了投射成本费,可是提升了记忆力成本费。要了解,包含尖子生以内,所有人都讨厌被英语单词。原生态获得dom的api也一样有这个问题
document.getElementsByClassName;document.getElementsByName;
document.querySelectorAll;这种api给人的觉得便是英语单词太长了,尽管他得出的实际意义是很清楚,殊不知这类作法是创建在放弃简单性的基本上开展的。因此大家又再度改变这一以前函数
functionsetColor(selector,color){
xxxxxxxxxxxx
}
在实际意义不做大的转变前提条件下,减缩函数名字。促使它**易读易记实用;
4.可拓宽
说白了拓宽是指函数的应用像水流一样依照撰写的次序实行产生实行传动链条:
document.getElementById('id').style.color='red';
document.getElementById('id').style.fontSize='12px';
document.getElementById('id').style.backgourdColor='pink';
用大家以前的以前的方法是再度封裝2个函数setFontSize,setbackgroundColor;随后实行他们setColor(‘id’,
‘red’);setFontSiez(‘id’,’12px’);setbackgroundColor(‘id’,‘pink’);
显而易见,那样的作法沒有懒出人生境界来;id元素每一次都必须 再次获得,危害特性,不成功;每一次都必须 加上新的方法不成功
每一次还需要启用这种方法,或是不成功。下边大家将其改变为能够拓宽的函数较早将获得id方法封裝成目标,随后再目标的每一个方法中回到这一目标:
functiongetElement(selector){
this.style=document.querySelecotrAll(selector).style;
}
getElement.prototype.color=function(color){
this.style.color=color;
returnthis;
}
getElement.prototype.background=function(bg){
this.style.backgroundColor=color;
returnthis;
}
getElement.prototype.fontSize=function(size){
this.style.fontSize=size;
returnthis;
}
//启用
varel=newgetElement('#id')
el.color('red').background('pink').fontSize('12px');
简易、顺畅、**易读后边大家会在参数里边讲到怎样再次提升。因此 ,大家都较为喜爱用jquery的api,尽管一个$标记并不意味着一切实际意义,但简易的标记有益于大家的应用。它展现了之上的多种多样标准,简易,**易读,易记,链条式书写,多参解决。
nightmare:
document.getElementById('id').style.color='red';
document.getElementById('id').style.fontSize='12px';
document.getElementById('id').style.backgourdColor='pink';
dream:
$('id').css({color:'red',fontSize:'12px',backgroundColor:'pink'})
二、一致性
1.接口的一致性
有关的接口保持一致的设计风格,一整套API假如传送一种了解和舒服的觉得,会**的缓解开发人员对新**工具的适应能力。
取名这一点事:不*短,又要自描述,**重要的是维持一致性“在电子计算机科技界*有俩件***的事:缓存文件无效和取名难题”—PhilKarlton
挑选一个你喜爱的用语,随后不断应用。挑选一种设计风格,随后维持这类设计风格。
Nightware:
setColor,
letBackGround
changefontSize
makedisplay
dream:
setColor;
setBackground;
setFontSize
set.........
尽可能地维持代码设计风格和取名设计风格,让人读你的代码好像阅读文章同一个人写的文章内容一样。
三、参数的解决
1.参数的种类
分辨参数的种类给你的程序流程给予平稳的确保
//大家要求,color接纳字符串类型
functionsetColor(color){
if(typeofcolor!=='string')return;
dosomething
}
2.应用json方法传参
应用json的方法传值许多益处,它能够给参数取名,能够忽视参数的具体地址,能够给参数初始值这些例如下边这类槽糕的状况:
functionfn(param1,param2...............paramN)
你务必相匹配地把每一个参数依照次序传到,不然你的方法便会偏移你预估去实行,恰当的方法是下面做法大全。
functionfn(json){
//为务必的参数设定初始值
vardefault=extend({
param:'default',
param1:'default'
......
},json)
}
这一段函数代码,就算你没传一切参数进去,他也会预估运作。由于在申明的情况下,你能依据实际的业务流程决策参数的缺省值。
四、可扩展性
软件开发**重要的标准之一:始终不改动接口,指拓展它!可扩展性与此同时会规定接口的岗位职责单一,多岗位职责的接口难以拓展。举例说明:
//必须 与此同时更改某一原素的字体样式和情况
//Nightmare:
functionset(selector,color){
document.querySelectroAll(selector).style.color=color;
document.querySelectroAll(selector).style.backgroundColor=color;
}
//没法拓展改函数,假如必须 再度更改字体样式的尺寸得话,只有改动此函数,在函数后边添加更改文字大小的代码
//Dream
functionset(selector,color){
varel=document.querySelectroAll(selector);
el.style.color=color;
el.style.backgroundColor=color;
returnel;
}
//必须 设置字体、背景色和尺寸
functionsetAgain(selector,color,px){
varel=set(selector,color)
el.style.fontSize=px;
returnel;
}
之上**简易的加上色调,业务流程繁杂而代码又不是你写的情况下,你也就务必去阅读文章以前的代码再改动它,显而易见是不符对外开放-封闭式标准的。改动后的function是回到了原素目标,促使下一次必须 更改时再度获得传参做解决。
this的应用
可扩展性还包含对this的及其call和apply方法的熟练掌握:
functionsayBonjour(){
alert(this.a)
}
obj.a=1;
obj.say=sayBonjour;
obj.say();//1
//or
sayBonjour.call||apply(obj);//1
五、对不正确的解决
1.预料不正确
可以用种类检验typeof或是try…catch。typeof会强制性检验目标不抛出去不正确,针对未定义的自变量特别是在有效。
2.抛出去不正确
大部分开发人员不期待出错了还必须 自身去找带相匹配得代码,比较好是方法是立即在console中輸出,告知客户发生什么事事儿。我们可以使用电脑浏览器的輸出api:console.log/warn/error。你要能够给自己的程序流程留些退路:
try…catch。
functionerror(a){
if(typeofa!=='string'){
console.error('paramamustbetypeofstring')
}
}
functionerror(){
try{
//somecodeexcuceteheremaybethrowwrong
}catch(ex){
console.wran(ex);
}
}
非本网作品均来自互联网,转载目的在于传递更多信息,并不**本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其他问题,请及时与本网联系,我们将及时删除内容。