《JavaScript设计模式与开发实战笔记一模式基础》
@(记录)[读书笔记]
一:简介JavaScript设计模式
多态技术:
**多态的实际含义是**:同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。
换句话说就是给不同的对象发送同一个消息的时候,这些对象会根据这个消息分别给出不同的反馈。
多态是面向对象编程中的一个重要技术;
使用多态的好处是,你可以不用考虑对象的类型,直接使用对象的行为就可以了;
简单多态
多态的思想实际上就是把“做什么”和“谁去做”分离开来。
JavaScript是弱类型语言,同时修改原型的方法会重写里面的方法,
不同于Java中多态继承,通过继续父类的方法,然后通过修改函数参数类型,数量来达到多态效果
|
|
了解ECMAScript中的let和Symbol
https://github.com/lukehoban/es6features
封装不仅仅是隐藏数据,还有实现细节,设计细节已经隐藏对象的类型
介绍了prototype,原型模式
JavaScript遵循的原型编程规则:
1,所有的数据都是对象
基本类型(undefined,number,boolean,string,function,object)
JavaScript中大多数数据是对象,而对象基本是基于Object对象创建的,
JavaScript中的根对象是Object.prototype对象。
创建对象有两种方法
Object提供创建对象的方法create
对象的创建
|
|
|
|
2,要得到一个对象,不是通过实例化,而是找到一个对象作为原型并克隆它
|
|
通过new调用Person构造函数创建一个对象,其实是先克隆Object.prototype然后在做一些
其他的额外操作(JavaScript是通过克隆Object.prototype来得到新对象,但实际上并不是每一次
都真正克隆了一个新的对象,从内存方面的考虑出发,JavaScript做了一些额外的处理,
具体细节可以看《JavaScript语言精髓与编程实践》)
3,对象会记住它的原型
4,如果对对象无法响应某个请求,它会把这个请求委托给它自己的原型系统
具体的说就是,对象中没有某个属性,就会沿着对象的原型链查找这个属性,直到Object.prototype,还是没有找到的话直接返回undefined
二:this,call,apply
this可以参考之前写的这篇笔记JavaScript中this的用法
call和apply的区别主要是传参的不同,apply可以传递数组,而call只能一个个传递。
apply接收两个参数,第一个参数指定了函数体内this对象的指向,第二个参数为一个带下表的集合
当使用apply和call的时候,如果第一个参数是null,函数体内的this会指向默认的宿主对象,在浏览器中则是window
|
|
严格模式下函数体内的this为null
使用call,apply改变函数内this的指向
三,闭包与高阶函数
所谓闭包就是在定义的作用域之外的地方调用这个作用域中的属性
常常的用法是结合匿名函数,在函数的内部定义一个函数。
|
|
eg:
为了解决img(new Image())上传丢失的问题(img是report函数中的局部变量,当report函数的调用结束后,img局部变量随即被销毁,而此时回去还没来得及发出HTTP请求,所以这次请求就会丢失)。使用闭包封装img,立即调用
###高阶函数
1,函数可以作为参数被传递
2,函数可以作为返回值输出
把函数作为参数传递,代表我们可以抽离一部分容易变化的业务逻辑,
把这部分逻辑放在函数参数中。
ajax中使用回调函数
高阶函数实现AOP (面向切面编程,主要作用是把一些跟核心业务逻辑模块无关的功能抽离出来)
函数的柯力化
非柯里化
通过函数节流提高JavaScript的性能。(事实上可以通过setTimeout来实现,规定时间间隔只触发什么事件),其实就是限制函数被频繁调用。
eg:
函数节流代码:原理是,将即将被执行的函数用setTimeout延迟一段时间执行。如果这次延迟执行还没有完成,则忽略接下来调用该函数的请求。
|
|
创建大量DOM造成卡顿的解决方案;(规定时间内创建多少个DOM节点)
|
|
测试test:
需要创建1000个节点,每批创建8个
惰性加载函数
PS: 寒假的任务一《JavaScript设计模式与开发实战》已经完成了,所以最近在整理一些相关模式的笔记,再次吸收消化。
下一步是《单页Web应用——JavaScript从前端到后端》
我只是希望自己在寒假这么长的时间里保持状态,保持学习的那股劲,虽然寒假家里效率不高,但是鸡汤喝多了,是需要消化的。