- OOP
封装:3种
继承:
自有属性和共有属性:
自有属性: 保存在当前对象本地,仅归当前对象自有的属性
共有属性: 保存在原型对象中,归多个子对象共有的属性
取值/访问时: 对象.成员名
修改时: 修改自有属性: 子对象.属性=值
修改共有属性: 原型对象.共有属性=值
如果强行用子对象.共有属性=值
后果: 为子对象自己添加一个同名的自有属性,从此子对象与父对象再无关系。——错误!
内置对象的原型对象:
内置对象: ES标准中规定的,浏览器已经实现了的,咱们可以直接使用的对象
js内置对象: 11个:
String Number Boolean
Array Date RegExp Math
Error
Function Object
global
其实,每种内置对象(除Math和global外)都是一种类型:
都由两部分组成:
1. 构造函数: 创建该类型的子对象
2. 原型对象: 保存该类型共有的函数
原型链:
什么是: 多级原型对象逐级引用形成的链式结构
作用: 1. 保存了一个对象可用的所有成员
2. 控制着成员的使用顺序: 先自有,再共有
多态:
什么是: 一个函数在不同情况下表现出不同的状态
2种:
- 重载:
- 重写(override): 子对象中定义了和父对象中同名的成员
何时: 只要子对象觉得父对象的成员不好用,就要定义自有的,来屏蔽父对象的。
自定义继承: 见1_自定义继承.pptx
- ES5:
- 严格模式:
什么是: 比普通js运行要求更严格的模式
为什么: js语言本身有很多广受诟病的缺陷
何时: 今后所有js代码都要运行在严格模式下
如何: 在当前作用域的顶部: “use strict”;
要求: - 禁止给未声明的变量赋值:
- 静默失败升级为错误:
静默失败: 执行不成功,也不报错! - 禁用了arguments.callee
arguments.callee: 在调用函数时,自动获得当前正在执行的函数本身。
何时: 专门用于在递归算法中,代替写死的函数名
递归的问题: 效率极低!——重复计算量太大!
解决: 几乎所有的递归都可以用循环代替 - 普通函数调用和匿名函数自调中的this不再指向window,而是undefinde