javascript高级概念
js继承
类式继承 构造函数 (klass 类式继承的一个分支?专门的方法来生成构造函数)
原型继承 Object.create() 原型指向一个对象
混入(拷贝)
call,apply 借用
js设计模式
1. 单体模式 全局共享同一个实例 (例如:对象字面量就是一个简单的单例)
2. 工厂模式 提供创建对象的接口(特征:以字符串传入工厂方法)(例如:Object()就是一个工厂函数)
3. 观察者模式 模块解耦,发布订阅,(例如:浏览器事件机制)
4. 适配器模式 转换接口
5. 代理模式 间接的操作 (例如:游戏组合键)
6. 桥接模式 抽象和实现分离,各自变化 (例如:传入回调)
7. 外观模式 组合底层实现,提供统一接口
8. 访问者模式 访问者模式先把一些可复用的行为抽象到一个函数(对象)里,在js里我们经常通过call或者apply的方式传递this对象给一个Visitor函数 (例如:Array,String构造器)
9. 策略模式 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换 (例如:表单验证时验证规则和配置项)
10. 模版方法模式 父类定义一组对象模板,子类视情况重写这些对象
11. 中介者模式 中介者对象可以让各个对象之间不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互
12. 迭代器模式 (例如:each(),forEach())
13. 组合模式 部分-整体模式 (例如:表单验证时整个表单对每个验证项的处理)
14. 备忘录模式 缓存数据
15. 职责链模式 一个对象A向另一个对象B发起请求,如果B不处理,可以把请求转给C,如果C不处理,又可以把请求转给D。一直到有一个对象愿意处理这个请求为止(例如:浏览器的时间冒泡机制)
16. 享元模式 主要用来减少程序所需的对象个数
17. 状态模式 状态模式主要可以用于这种场景 1 一个对象的行为取决于它的状态 2 一个操作中含有庞大的条件分支语句
js执行上下文
1. 执行上下文堆栈 (当进入一个新函数,会在栈顶创建一个新的执行上下文,上下文执行完毕将退出堆栈,将控制权交给上一级上下文)
2. 执行上下文 有三个属性 Variable object, scope chain, thisValue
3 Variable object 存储变量和函数声明(不包括函数表达式)
4. Variable object 和 Active object 的区别 (活动对象除了变量和函数声明之外,它还存储了形参和arguments对象)(函数执行时会生成活动对象)
5. 作用域链是一个对象列表,上下文代码中出现的标识符在这个列表中进行查找,如果一个变量在函数自身的作用域(在自身的变量/活动对象)中没有找到,那么将会查找它父函数(外层函数)的变量对象,
当一个函数在其代码中引用一个不是局部变量(或者局部函数或者一个形参)的标识符(变量名称,函数声明,形参,等等),那么这个标识符就叫作自由变量。搜索这些自由变量(free variables)
正好就要用到作用域链,当解析(查找)一个标识符的时候,会从作用域链中的活动对象开始查找,然后(如果这个标识符在函数自身的活动对象中没有被查找到)向作用域链的上一层查找-重复这个过程
6. this是一个与执行上下文相关的特殊对象。因此,它可以叫作上下文对象(也就是用来指明执行上下文是在哪个上下文中被触发的对象)(this指向函数调用者)