JohnAu-Yeung来源:medium译者:前端小智有梦想,有干货,微信搜索【大千世界】追随这位凌晨还在洗碗的洗碗智慧。本文已收录到GitHubhttps://github.com/qq449245884/xiaozhi,里面有完整的测试站点、资料和我的一线厂商访谈系列文章。JavaScript是一种易于学习的编程语言,很容易编写可以运行并执行某些操作的程序。但是,很难写出一段干净的JavaScript代码。在本文中,我们将介绍一些与清理JavaScript函数和类相关的重构思想。不要直接给参数赋值在使用一个参数之前,我们应该去掉对参数的赋值,将参数值赋给一个变量。例如,我们可以这样写代码:constdiscount=(subtotal)=>{if(subtotal>50){subtotal*=0.8;}}与上面的代码相反,我们可以这样写:constdiscount=(subtotal)=>{let_subtotal=subtotal;如果(_subtotal>50){_subtotal*=0.8;}}因为参数可能传值也可能传引用,如果是传引用,直接负值运算,有些结果会比较混乱。这个例子是按值传递的,但为了清楚起见,我们无论如何都将参数分配给变量。用函数替换方法我们可以使方法成为它自己的方法,以便所有类都可以访问它。例如,我们可以这样写代码:consthello=()=>{console.log('hello');}classFoo{hello(){console.log('hello');}//...}classBar{hello(){console.log('hello');}//...}我们可以将hello方法提取到这样的函数中:consthello=()=>{console.log('hello');}classFoo{//...}classBar{//...}由于hello方法不依赖于this并且在两个类中重复,我们应该将其移至其自身函数以避免重复。AlternativeAlgorithm相对于流式的写法,我们想换成更清晰的算法。例如,我们可以这样写代码:constdoubleAll=(arr)=>{constresults=[]for(constaofarr){results.push(a*2);}returnresults;}相对于上面的代码,我们可以这样写:constdoubleAll=(arr)=>{returnarr.map(a=>a*2);}通过数组的方法来代替循环,这样doubleAll函数会更简洁。如果有更简单的方法来解决我们的需求,那么我们应该使用它。移动方法是在两个类之间,我们可以将一个类的方法移动到另一个类中,比如我们可能会这样写代码:classFoo{method(){}}classBar{}如果,我们使用的方法在Bar类中使用频率更高,因此method方法应该移至Bar类中。如果Foo需要直接调用Bar类中的方法,就可以使用。classFoo{}classBar{method(){}}移动字段除了移动方法,我们还可以移动字段。例如,我们可以这样写代码:classFoo{constructor(foo){this.foo=foo;}}classBar{}出于与move方法类似的原因,我们有时会像这样更改代码:classFoo{}classBar{constructor(foo){this.foo=foo;}}我们可以将字段移到最需要的地方提取类如果我们的类很复杂并且有多个方法,那么我们可以将额外的方法移到新类中。例如,我们可以这样写代码:classPerson{constructor(name,phoneNumber){this.name=name;this.phoneNumber=phoneNumber;}addAreaCode(areaCode){return`${areaCode}-${this.phoneNumber}`}}我们可以这样重构:}addAreaCode(areaCode){return`${areaCode}-${this.phoneNumber}`}}classPerson{constructor(name,phoneNumber){this.name=name;this.phoneNumber=newPhoneNumber(phoneNumber);}}上面我们将Person类的不太相关的方法addAreaCode移到了我们应该处理的类中。通过这样做,两个类只做一件事,而不是让一个类做多件事。总结我们可以从复杂的类中提取代码,这些代码可以将各种功能添加到它们自己的类中。此外,我们可以将方法和字段移动到它们最常用的地方。给参数值赋值容易混淆,所以我们应该先给变量赋值再使用。代码部署后可能存在的bug,无法实时获知。事后为了解决这些bug,花费了大量的时间在日志调试上。顺便推荐一个好用的bug监控工具Fundebug。原文:https://levelup.gitconnected....交流有梦想,有干货,微信搜索【大招天下】关注这位大清早还在洗碗的洗碗智慧。本文已收录到GitHubhttps://github.com/qq449245884/xiaozhi,里面有完整的测试站点、资料和我的一线厂商访谈系列文章。
