js设计模式(一)封装、多态、原型模式、闭包

1、编程语言按数据类型可分为静态类型、动态类型语言

静态类型优点在编译时就能发现类型不匹配的错误,缺点迫使程序员依照强契约编写约定(代码良多,分散程序员在业务逻辑上的精力)

动态优点是代码数量更少,可以将更多精力放在逻辑上,缺点是无法保证变量类型

2、鸭子类型的思想

例如:一个对象有pop和push方法并且这些方法被正确的实现,就可以被当作栈来使用;

一个对象有length属性,也可以依照下标来存取属性(最好还有slice、splice等方法),这个对象就可以当作数组来使用

3、多态的实际含义是:同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。

多态背后的思想是将“做什么”和“谁去做以及怎样做”分离开来,也就是将“不变的事”和“可能改变的食物”分离开来

多态的根本作用就是把过程化的条件分支语句转化为多态的对象行,从而消除这些条件分支语句。

利用对象的多态性,每个对象应该做什么,已经成为了该对象的一个方法,被安装在对象的内部,每个对象负责他们的行为。所以这些对象可以根据同一个消息,有条不紊的分别进行各自的工作。

4、封装的目的事信息隐藏,广义的封装不仅包括封装数据和封装实现,还包括封装类型和封装变化

①封装数据,js只能依赖变量的作用域来实现封装特性

②封装实现,封装不仅仅是隐藏数据,还包括隐藏实现细节、设计细节以及隐藏对象的类型等。

从封装实现细节讲,封装是的对象内部的变化对其他对象而言事不可见的,对象对它自己的行为负责。其他对象、用户不必关系其内部实现

③封装类型,(个人见解借助ts)

④封装变化

把系统中稳定不变的部分和容易变化的部分隔离开来,保证程序的稳定性和可拓展性

5、原型模式

原型模式通过克隆创建对象,如果需要一个与某个对象一模一样的对象,就可以使用原型对象

var Plane = function(){

this.blood = 100

}

var plane = new Plane()

plane.blood = 500

var clonePlane = Object.create(plane)

console.log(clonePlane.blood)//500

在不支持Object方法的浏览器中,则可以使用以下代码:

 Object.create = Object.create || function (obj){

   var F = function(){}

F.prototype = obj//基于原型链的委托机制就是原型继承的本质

return new F()

}

②原型编程的基本原则

所有的数据都是对象

要得到一个对象不是实例化类,而是找到一个对象作为原型并克隆它

对象会记住它的原型

对象无法相应某个请求,它会把这个请求委托给他的原型。

6、js的根对象是Objec.prototype,该对象是空对象。另外通过Object.create(null)可以创建出没有原型的对象

Array.prototype.slice.call(arguements)将类数组对象转为数组,(dom节点除外,因为ie下的dom对象是以com对象的形式实现的,js对象与com对象不能进行转换)

7、闭包

变量的作用域指变量的有效范围

变量的生存周期:全局变量是用具的;对局部变量,随着函数的退出而销毁

闭包的作用

①封装变量②延长局部变量的寿命

处理闭包的内存泄漏

①手动将变量设为null

删除闭包

var foo = (function() {

    var n = 0;

    return {

        add: function () {

            return ++n;

        },

        clearVariable: function () {

            n = null;

        }

    }

})();

外部无法访问到闭包里面的变量, 但可以在闭包内部返回一个方法, 该方法将闭包内部的变量设置为null, 让变量失去引用,会被系统自动回收。

实际上如果只是要把闭包内的一些变量给删除, 那么我觉得这样的程序设计是有问题的,  如果你的变量只需要用一次,就要删除,那么使用闭包来实现这样的方法显然是浪费。   如果闭包不需要了, 想删除闭包,直接 foo = null; 就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值