
js进阶
yufawu
输出倒逼输入!
展开
-
高阶函数--实现AOP,函数节流,分时函数,惰性加载函数
高阶函数是指至少满足下列条件之一的函数。函数可以作为参数被传递;函数可以作为返回值输出。JavaScript语言中的函数显然满足高阶函数的条件,在实际开发中,无论是将函数当作参数传递,还是让函数的执行结果返回另外一个函数,这两种情形都有很多应用场景,下面就列举一些高阶函数的应用场景。函数作为参数传递把函数当作参数传递,这代表我们可以抽离出一部分容易变化的业务逻辑,把这部分...原创 2019-01-17 22:42:57 · 1450 阅读 · 0 评论 -
设计原则之开放-封闭原则
在面向对象的程序设计中,开放-封闭原则(OCP)是最重要的一条原则。很多时候,一个程序具有良好的设计,往往说明它是符合开放-封闭原则的。开放-封闭原则最早由Eiffel语言的设计者Bertrand Meyer在其著作Object-Oriented Software Construction 中提出。它的定义如下:软件实体(类、模块、函数)等应该是可以扩展的,但是不可修改。扩展window.o...原创 2019-02-05 08:35:23 · 589 阅读 · 2 评论 -
设计原则之单一职责原则
就一个类而言,应该仅有一个引起它变化的原因。在JavaScript中,需要用到类的场景并不太多,单一职责原则更多地是被运用在对象或者方法级别上,因此本节我们的讨论大多基于对象和方法。单一职责原则(SRP)的职责被定义为“引起变化的原因”。如果我们有两个动机去改写一个方法,那么这个方法就具有两个职责。每个职责都是变化的一个轴线,如果一个方法承担了过多的职责,那么在需求的变迁过程中,需要改写这个方法...原创 2019-02-02 19:36:17 · 2087 阅读 · 0 评论 -
闭包--生存周期,实现命令模式,内存管理
对于JavaScript程序员来说,闭包(closure)是一个难懂又必须征服的概念。闭包的形成与变量的作用域以及变量的生存周期密切相关。下面我们先简单了解这两个知识点。变量的作用域变量的作用域,就是指变量的有效范围。我们最常谈到的是在函数中声明的变量作用域。当在函数中声明一个变量的时候,如果该变量前面没有带上关键字var,这个变量就会成为全局变量,这当然是一种容易造成命名冲突的做法。另外...原创 2019-01-16 22:43:15 · 3847 阅读 · 0 评论 -
代码重构
模式和重构之间有着一种与生俱来的关系。从某种角度来看,设计模式的目的就是为许多重构行为提供目标。在实际的项目开发中,除了使用设计模式进行重构之外,还有一些常见而容易忽略的细节,这些细节也是帮助我们达到重构目标的重要手段。这里挑选一些进行介绍,其中有一部分思想来自Martin Fowler的名著《重构:改善既有代码的设计》,虽然该书是使用Java语言写成的,但这些重构的技巧,有很大一部分可以为Ja...原创 2019-02-01 21:42:29 · 1871 阅读 · 0 评论 -
JavaScript中的this、call和apply
在JavaScript编程中,this关键字总是让初学者感到迷惑,Function.prototype.call和Function.prototype.apply这两个方法也有着广泛的运用。我们有必要在学习设计模式之前先理解这几个概念。this跟别的语言大相径庭的是,JavaScript的this总是指向一个对象,而具体指向哪个对象是在运行时基于函数的执行环境动态绑定的,而非函数被声明时的环境...原创 2019-01-15 22:39:32 · 1661 阅读 · 0 评论 -
JavaScript的面向对象--原型
在以类为中心的面向对象编程语言中,类和对象的关系可以想象成铸模和铸件的关系,对象总是从类中创建而来。而在原型编程的思想中,类并不是必需的,对象未必需要从类中创建而来,一个对象是通过克隆另外一个对象所得到的。就像电影《第六日》一样,通过克隆可以创造另外一个一模一样的人,而且本体和克隆体看不出任何区别。使用克隆的原型模式从设计模式的角度讲,原型模式是用于创建对象的一种模式,如果我们想要创建一个对象...原创 2019-01-14 22:51:03 · 1213 阅读 · 0 评论 -
JavaScript的面向对象--封装的实现、类型、变化
封装的目的是将信息隐藏。一般而言,我们讨论的封装是封装数据和封装实现。这里将讨论更广义的封装,不仅包括封装数据和封装实现,还包括封装类型和封装变化。封装数据在许多语言的对象系统中,封装数据是由语法解析来实现的,这些语言也许提供了private、public、protected等关键字来提供不同的访问权限。但JavaScript并没有提供对这些关键字的支持,我们只能依赖变量的作用域来实现封装特...原创 2019-01-13 19:41:57 · 1509 阅读 · 0 评论 -
面向对象的JavaScript--多态
一段“多态”的JavaScript代码 var makeSound = function( animal ){ if ( animal instanceof Duck ){ console.log( '嘎嘎嘎' ); }else if ( animal instanceof Chicken ){ console.log( '咯咯咯' );...原创 2019-01-12 23:24:03 · 1015 阅读 · 0 评论 -
设计原则之接口和面向接口编程
当我们谈到接口的时候,通常会涉及以下几种含义,下面先简单介绍。我们经常说一个库或者模块对外提供了某某API接口。通过主动暴露的接口来通信,可以隐藏软件系统内部的工作细节。这也是我们最熟悉的第一种接口含义。第二种接口是一些语言提供的关键字,比如Java的interface。interface关键字可以产生一个完全抽象的类。这个完全抽象的类用来表示一种契约,专门负责建立类与类之间的联系。第三种接...原创 2019-02-06 08:30:21 · 605 阅读 · 1 评论