JavaScript 设计模式 之 代理模式

代理模式是为对象提供一个代用品或占位符,以便控制对它的访问。代理模式的关键是,当客户端不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问,客户端实际上访问的是替身对象。替身对象对请求做出一些处理之后,在把请求转交给本体对象。例子1:代理实现图片预加载(虚拟代理)varmyImg=(function(){varimage=document.createElement(......

JavaScript 设计模式 之 策略模式

策略模式定义:定义一系列的算法,把它们一个个的封装起来,并且使用它们可以相互替换。案例1:计算员工的年终奖,绩效S的认年终奖为4倍工资,绩效A的认年终奖为3倍工资,绩效B的认年终奖为3倍工资。代码如下:varstrategies={"S":function(salary){returnsalary*4;},"A":function(salary){returnsalary*3;},"B":func......

JavaScript 设计模式 之 单例模式

在JavaScript里,实现单例的方式有很多种,其中最简单的一个方式是使用对象字面量的方法,其字面量里可以包含大量的属性和方法:varmySingleton={property1:"something",property2:"somethingelse",method1:function(){console.log('helloworld');}};如果以后要扩展该对象,你可以添加自己的私有成员......

JavaScript 高级函数其他应用 函数节流(3)

JavaScript中函数大多情况下是由用户主动触发的,除非是函数本身的实现不合理,否则我们一般不会遇到性能问题。但是在极少数情况下,函数的触发不是由用户直接控制的。在这种场景下,函数有可能被频繁的调用,而造成大的性能问题。下面举一些这样的应用场景:1)window.onresize事件。我们给window对象绑定了resize事件,当浏览器窗口大小被拖动而改变的时候,这个事件触发的频率非常之高。......

JavaScript 多态

多态的含义:同一操作作用不同的对象上面,可以产生不同的解释和不同的结果。例:假设我们要写一个地图应用,现在可能有两家供应商提供我们接入自己的应用(百度,谷歌).两家供应商的api中提供show方法,负责展示地图。代码如下:vargoogleMap={show:function(){console.log('开始渲染谷歌地图')}}varbaiduMap={show:function(){conso......

JavaScript 动态类型语言和鸭子类型

动态类型语言编程语言按照数据类型大体可以分为两类,一类是静态类型语言,另一类是动态类型语言。静态类型语言在编译时便已经确定变量的数据类型。动态类型语言的变量类型是到程序运行的时候,待变量被赋予某个值之后,才会具有某种类型。在JavaScript中,当我们对一个变量赋值时,显然不需要考虑它的类型,因此,JavaScript是一门典型的动态类型语言。动态类型语言对变量类型的宽容给实际编码带来了很大的灵......