您的位置:首页 > Web前端 > JavaScript

js设计模式

2016-06-30 10:53 211 查看
前言:

闭包:关于闭包这个月在园子里有几篇不错的分享了,在这我也从最实际的地方出发,说说我的理解。闭包:关于闭包这个月在园子里有几篇不错的分享了,在这我也从最实际的地方出发,说说我的理解。

    1.闭包最常用的方式就是返回一个内联函数(何为内联函数?就是在函数内部声明的函数);

    2.在JavaScript中有作用域和执行环境的问题,在函数内部的变量在函数外部是无法访问的,在函数内部却可以得到全局变量。由于种种原因,我们有时候需要得到函数内部的变量,可是用常规方法是得 不到的,这时我们就可以创建一个闭包,用来在外部访问这个变量。

    3.闭包的用途 主要就是上一点提到的读取函数内部变量,还有一个作用就是可以使这些变量一直保存在内存中。

    4.使用闭包要注意,由于变量被保存在内存中,所以会对内存造成消耗,所以不能滥用闭包。解决方法是 在退出函数之前,将不使用的局部变量全部删除。

eg:

var testfn=function(){

var n=1;

function f1(){

n=n+1;

console.log(n);

};

return f1;//return 返回f1(),那么result是一个函数,他就没有了result()方法。

};

var result=testfn();

result();//2

result();//3函数内部变量一直保存在内存中。

封装:通过将一个方法或者属性声明为私用的,可以让对象的实现细节对其他对象保密以降低对象之间的耦合程度,可以保持数据的完整性并对其修改方式加以约束,这样可以是代码更可靠,更易于调试。封装是面向对象的设计的基石。

  尽管JavaScript是一门面向对象的语言,可它并不具备将成员声明为公用或私用的任何内部机制,所以我们只能自己想办法实现这种特性。下面还是通过一套完整的代码去分析,介绍什么是私有属性和方法, 什么是特权属性和方法,什么是公有属性和方法,什么是公有静态属性和方法。

私有属性和方法:函数有作用域,在函数内用var 关键字声明的变量在外部无法访问,私有属性和方法本质就是你希望在对象外部无法访问的变量。

特权属性和方法:创建属性和方法时使用的this关键字,因为这些方法定义在构造器的作用域中,所以它们可以访问到私有属性和方法;只有那些需要直接访问私有成员的方法才应该被设计为特权方法。

共有属性和方法:直接链在prototype上的属性和方法,不可以访问构造器内的私有成员,可以访问特权成员,子类会继承所有的共有方法。

共有静态属性和方法:最好的理解方式就是把它想象成一个命名空间,实际上相当于把构造器作为命名空间来使用。

继承:

继承本身就是一个抽象的话题,在JavaScript中继承更是一个复杂的话题,因为JavaScript想要实现继承有两种实现方式,分别是类式继承和原型式继承,每种实现的方式都需要采取不少措施,下面本人通过分析例子的方式讲解JavaScript中这个很重要的话题。

生成器模式 车部件例子

// js的构造模式:就是用this

// js的原型模式:就是函数名.prototype.属性名或方法名定义。

// 简单工厂模式说就是简单声明函数对象,外部声明属性和方法

// 命令模式简单来说,写一个公共调用函数,带有形参:每个菜单的对应页面的元素,执行方法。

//

/*js的设计模式

* js的多态性,各个对象的不同形态。

*js的克隆,

* var ff=Object.create(object);

* s的原型模式:就是函数名.prototype.属性名或方法名定义。

* Functon.prototype.call或Function.prototype.apply调用:动态改变传入函数的this

* apply(this,arguments)

* call(abs,1);暂时借用

* js的闭包和高阶函数;函数可以作为参数被传递, 函数可以作为返回值输出

*js单例模式:透明和不透明

*js策略模式:利用函数的形参,根据形参返回不同的值。

* js代理模式:我建立一个方法,参数是朋友对象,朋友对象帮我做一件事送给我女朋友一个礼物。

* js迭代模式:jquery的each方法,每一个对象进行操作,reduce,map,等方法。

* js命令模式:命令模式简单来说,写一个公共调用函数,带有形参:每个菜单的对应页面的元素,执行方法。

* js构造模式:js的构造模式:就是用this

* js的原型模式:就是函数名.prototype.属性名或方法名定义。

* js组合模式:就是根据做一件事情的先后顺序,根据某种关系进行分组成一个个函数,对整件事看做一个对象,把这些先后压入对象中。

* js模板方法模式:提供接口方法,统一使用。utils

* js的享元模式:相当于Model

* js职责链模式:使多个对象都有机会处理请求,从而避免请求的发送和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到一个对象处理它为止

* 根据对比,他跟策略模式差不多。

* js中介者模式:两个对象之间存在某种关联,对比pk游戏,建立关联的对象就是中介者。

* js装饰模式:一个对象,他有很多功能,那么我们一个个把这些方法都装饰起来,以便直接调用,

* js状态模式:灯这个对象灭与亮

* js适配器模式,根据形参,来判断与对象中的哪个属性或动作相匹配。

* *////一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript 函数 闭包