书摘&心得
1 关于this
- this被用来隐式传递对象的引用,一个默默的快递员
- 误解:this指向自身,this指向它的作用域
在哪生(苏州)不重要,在哪用(南京)也不重要,重要的是谁(公司)在用
2 this全面解析
隐式绑定:this指向调用函数的对象(分配就业)
- 严格模式下全局对象无法使用默认绑定,this会指向undefined(没公司的孩子像根草)
- 丢失this(各种跳槽)【86】
- 给函数取别名,通过别名调用函数时,this指向调用别名的对象(跳槽)
- 回调函数也是在给函数取别名,某些库甚至会改写this,绑定到触发事件的元素DOM上(被跳槽)
- 其实就是第一条,this指向调用函数的对象
显示绑定(主动就业)
公司、人
- 函数是对象的一等公民,是复杂一些的对象(是人)
- 简单基本类型不是对象。(不是人也不是公司,是一种抽象概念,如【交互研发部】)
- 内置对象子类型就是内置函数
- 某些情况下简单基本类型会被转换成内置对象子类型(狸猫换太子?)
- 属性、函数、方法【107】
- 属性名是string类型,是公司的部门名
- 函数是员工
- 员工签订的是劳动合同(指针)而不是卖身契
- 上班的时候我属于公司,是方法;下班的时候我变回自己,是函数。
- Object.assign只复制键与键值,不复制对象本身的属性。
- 属性描述符
- 公司的特性(是否加班?是否500强?)
- 对象是否可写?可改?可枚举?
- 对象冻结是深度冻结,可能会影响共享的对象。【115】
[[Get]] [[Put]] Getter Setter
什么是类
- 类意味着复制
- 类是一种设计模式,是可选的。其他语言选择强制使用类,但是javaScript并不是
- 在其它语言中,类和实例就好像蓝图和建筑,构造函数是两者的接口
- javascript与类
- javaScript中只有对象,不存在可以被实例化的“类”
- js中函数难以真正的复制,共享的是函数的引用,是委托【138】
- “混入”是一种模拟类的方法,但是得不偿失【141】
ES6与类【189】
原型对象是js中的“类”,但本质上是对象。【194】
- 原型对象是动态的,可以修改,不像类是静态的。
- 修改原型对象就等同于修改所有小弟,是HACK的基础。
- 原型对象的小弟们(都是特权方法)【红宝书187 188】
- constructor是原型对象的一个小弟,是一个函数。【Input】
- 调用constructor构造出来的还是一个对象(实例)【】
- 修改constructor可以修改所有小弟,是函数式组件HACK的基础。
- 使用class创建的类是一个原型对象。
- 独有的render是一个小弟,挂在原型对象上,是普通组件HACK的基础。
- constructor是原型对象的一个小弟,是一个函数。【Input】
- 【HACK实现】特权方法有权访问/修改同一作用域的一切方法、属性
- 写在构造函数里(Modal的hack)【红宝书187】
- 挂在原型链上(Input的hack)【红宝书188】