接口和面向接口编程

1,抽象类

例如,Duck对象和Chicken对象的类型都隐藏在Animal类型的身后,向上转型。建立契约,抽象类里面的abstract方法,各个子命令类继承或者覆写。

面向接口编程,接口是个抽象的概念,可以理解为:面向超类型编程,当对象的具体类型被隐藏在超类型的身后,这些对象就可以相互替换使用,而我们的关注点就会从对象类型转移到对象的行为上。也可以看成面向抽象编程,即针对超类型中的abstract方法编程。

Javscript是一门动态类型语言,类型本身比较模糊,除了number,string,boolean等,其他对象天生被向上转型成Object类型。动态类型语言中,对象的多态性与生俱来。

因为javascript是动态语言,所以我们在业务代码中经常插入一些跟业务无关的防御性代码。

TypeScript是微软开发的一种编程语言,是JavaScript的一个超集,与CoffeeScript类似,TypeScript最终会被编译成Javascript代码执行,通过TypeScript我们可以使用静态语言的方式来编写JavaScript程序。

代码重构技巧:

(1)提炼函数

(2)合并重复的条件片段

(3)将条件分支语句提炼成函数,语义化条件后更加容易理解

(4)合理使用循环,举例如下: 

var createXHR = function(){
var xhr;
try{
     xhr = new ActiveXObject( 'MSXML2.XMLHttp.6.0' );
}catch(e){
try{
     xhr = new ActiveXObject( 'MSXML2.XMLHttp.3.0' );
}catch(e){
     xhr = new ActiveXObject( 'MSXML2.XMLHttp' );
}
}
     return xhr;
};
var xhr = createXHR();

 上面是创建XHR对象的代码,可以使用循环更加简练:

var createXHR = function(){
var versions= [ 'MSXML2.XMLHttp.6.0ddd', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp' ];
for ( var i = 0, version; version = versions[ i++ ]; ){
  try{
     return new ActiveXObject( version );
  }catch(e){
  }
}
};
var xhr = createXHR();

(5)提前让函数退出,代替嵌套条件分支

每个函数只能有一个入口和一个出口,关于函数只有一个出口,嵌套的条件分支往往深信这个,但是实际上,如果对函数的剩余部分不感兴趣,就应该提前退出。

(6)对于过长的参数列表,可以用对象参数代替,不用再关心参数的数量和顺序,只要保证参数对应的key值即可。

(7)尽量减少参数数量

(8)少用三目运算符

程序员喜欢大规模使用三目运算符来代替传统的if,else,理由是性能高,代码量少。但是有时候会得不偿失,如果条件复杂还是乖乖使用if,else吧

(9)合理使用链式调用

JavaScript中实现链式调用很简单,让方法调用结束后返回对象本身即可。但是链式调用的调试和维护比较困难。

(10)分解大类型

(12)用return退出多重循环 

var print = function( i ){
console.log( i );
};
var func = function(){
 for ( var i = 0; i < 10; i++ ){
   for ( var j = 0; j < 10; j++ ){
     if ( i * j >30 ){
       return print( i );
     }
     }
   }
 };
func();

 针对return后面要执行的代码,可以提炼成一个单独的函数,然后执行。

 

【完】

 

I leave uncultivated today, was precisely yesterday perishes tomorrow which person of the body implored,我荒废的今日,正是昨日殒身之人祈求的明日。

——哈佛大学校训

posted @ 2019-02-21 15:29  tangjiao_Miya  阅读(398)  评论(0编辑  收藏  举报