开始
在JS中,this的指向是由函数调用时的位置来决定的。那函数执行时是怎样决定this的绑定对象的呢?首先我们先要分析this的调用栈,我们所关心的调用位置就是当前正在执行的函数的前一个调用,找到调用位置以后,再根据以下实际情况判断this的指向。
- 默认绑定
function foo() {
console.log(this.a)
}
var a = 1
foo() // 1
这段代码里,this.a被解析为window.a,因为foo是直接调用而没有任何修饰的函数引用,所以只能使用默认绑定.
注意:当函数体内设置为严格模式时,foo无法绑定到window.
- 隐式绑定
该情况要考虑是否由上下文对象,或者被对象包含
function foo(){
console.log(this.a)
}
var obj = {
a: 'obj',
foo: foo
}
obj.foo() // obj
注意:对象属性引用链中只有最顶层或者说最后一层会影响调用位置
function foo() {
console.log( this.a );
}
var obj = {
a: '2',
obj1: obj1,
}
var obj1 = {
a: 42,
foo: foo
}
obj.obj1.foo() // 42