原型与原型链
- 所有对象都有自己的原型,包括原型本身
- 原型链的顶端 -> Object.prototype
- 普通函数不写返回值 默认return undefined
- 构造函数实例化以后返回的就是this
_proto_
:构造函数实例化出来的对象永远指向构造函数的原型对象constructor
:指向创建自己的那个构造函数prototype
:每个函数都会有这么一个属性,这个属性指向一个对象,这个对象就叫做原型对象
1 | 1.Function的__proto__指向其构造函数Function的prototype |
1 | var obj1 = {} |
- 不是所有的对象都继承与Object.prototype
1 | Number.prototype.toString.call(1) // "1" |
call、apply、bind
- 更改this指向
1 | function Car(brand,color){ |
继承
- 继承的圣杯模式
1 | function Teacher(){ |
封装buffer
1 | var inherit = (function(){ //模块化 防止全局污染 |
1 | //隐式转换 |
对象枚举
1 | //for in 既能遍历对象也能遍历数组 |
hasOwnProperty
- 判断对象自身属性中是否具有指定的属性 true | false
- 排除原型
1 | 'name' in obj | obj['name'] |
instanceof
- B构造函数的原型是否在A实例对象的原型链上
1 | //判断类型 |
this
- 全局this指向window
- 预编译函数this指向window
- apply、call改变this指向
- 构造函数的this指向实例化对象
1 | function Test(){ |
callee、caller
1 | arguments.callee //引用该函数体当前正在执行的函数 严格模式已删除 |
1 | function.caller //返回调用当前function函数的函数引用 |
typeof
- object | function | number | string | boolean | undefined
- obect里面包含null | 历史遗留问题
- {} != {} | 引用值对比的是地址
1 | var obj = {} |
三元运算符
1 | 条件 ? 运算1 :运算2 |
克隆
- 浅拷贝
- 创建的新对象会影响旧对象内的属性值
1 | var obj = { |
1 | function clone(origin,target){ |
- 深拷贝
- 创建的新对象不会影响旧对象内的属性值
1 | function deepClone(origin,target){ |