默认即约定俗成,this指向全局对象window,严格模式下this为undefined。bash
this.a === window.a // true
函数
var a = 1;
ui
this.a // 1
this
use strict
spa
this === window // false
code
this === undefined // true
对象
顾名思义,隐式绑定大致上能够理解为一个对象有一个属性为函数,此时这个函数的this指向的是调用它的对象所处的自身,直接上代码:get
var name = 'windowName'
let obj = {
name: 'name',
getName: function() {
console.log(this.name)
}
};
obj.getName(); // name 此时是obj调用的getName方法,因此this指向obj
let obj2 = obj.getName;
obj2(); // windowName 此时是window调用的obj2方法,因此this指向window,即window.obj2()
复制代码
var name = 'windowName'
var obj = {
name: 'name',
getName: function() {
return function() {
console.log(this.name)
}
}
};
obj.getName()(); // windowName
var obj2 = obj.getName;
obj2()(); // windowName
复制代码
原来,obj.getName()返回的是一个functionstring
而function的this指向的是window,因此报出来的是windowName.obj2()it
同理,例一 中的obj2也是同理,obj2 === obj.getName 返回的也是一个function,因此obj2的this指向的也是window
因此我们能够得出,隐式绑定根据的是调用者的上下文环境。