this

###this
我们需要根据 "调用位置" 上函数的 "调用方式" 来确定函数中this使用的 "绑定规则"

###绑定规则
默认绑定
this==>winow对象
隐式绑定
1.this==>函数引用的上下文对象
2.隐式丢失:发生引用传递时会有隐式丢失的情况
引用赋值
参数传递
3.隐式丢失解决方案
使用硬绑定(一种显示绑定的形式)
显示绑定
this==>我们指定的对象
new绑定
this==>实例对象

###优先级
new绑定 > 显示绑定 > 隐式绑定 > 默认绑定

###正常情况下的规则
1. 函数是否在new中调用(new绑定)?如果是的话this绑定的是新创建的对象。
var bar = new foo()
2. 函数是否通过call、apply(显式绑定)或者硬绑定调用?如果是的话,this绑定的是指定的对象。
var bar = foo.call(obj2)
3. 函数是否在某个上下文对象中调用(隐式绑定)?如果是的话,this绑定的是那个上下文对象。
var bar = obj1.foo()
4. 如果都不是的话,使用默认绑定。如果在严格模式下,就绑定到undefined,否则绑定到全局对象。
var bar = foo()


###绑定例外
在某些场景下this的绑定行为会出乎意料,你认为应当应用其他绑定规则时,实际上应用的可能 是默认绑定规则

###柯里化
只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。(预定义一些参数)



软绑定
箭头函数的this不符合我们的this正常的绑定规则



posted @ 2017-01-12 09:44  stronger—小妮妮  阅读(115)  评论(0)    收藏  举报