### Symbol 的作用
- 表示独一无二的变量防止命名冲突
- 作为对象的 key 值, 该可以 key 值不会被 `Object.keys()`或 `for in` 遍历到, 只能通过`Object.getOwnPropertySymbols` 遍历, 可以用于模拟对象私有变量
- 用于提供遍历的接口, 对象定义了`Symbol.iterator` 属性, 值为函数, 返回一个迭代器对象, 这样普通对象就可以用`for of`进行遍历, 数组默认实现了该方法
- `Symbol.for(key)`, 用于创建一个放在全局注册表中的唯一值, 第二次去取的时候去除同样的值.
### new 一个构造函数
- 创建一个空对象 obj
- 令 obj 的`__props__` 指向构造函数的 `prototype`
- 执行构造函数执行 call, 令 this 指向 obj
- 如果构造函数放回的是一个对象就把对象返回, 其他情况放回 obj
> 如果构造函数返回的是 boolean, number, string, null,Symbol, undefine 等基础数据类型也会返回 obj, 返回的对象是 new String, new Boolean 等创建出来的也算对象.
### DOM事件
- web端常见的DOM事件
- DOM0级事件, 直接在元素上绑定的`on-event`事件,如onclick, 取消的话使用`dom.onclick = null`, 同一个只能有一个处理程序, 后面的覆盖前面的
- DOM2级事件, 通过 addEventListener注册的事件, 通过remoteEventListener取消事件监听, 一个事件可以有多个事件处理程序,