javascript 中this指向并不是在函数定义的时候确定的,而是在函数调用时确定的,也就是说,函数的调用方式决定了this的指向。
JavaScript中普通函数调用方式有三种:直接调用,方法调用和new调用,还有一些特殊调用,比如,通过bind()将函数绑定到对象之后再进行调用,通过call(),apply()进行调用等
直接调用
即为通过函数名()调用,这是,函数内部的this指向全局变量,在浏览器中全局对象是window,在nodejs中全局对象是global
需要注意的是,直接调用不只是全局作用下进行调用,在任何作用域下,只要通过函数名()调用,都叫做直接调用
bind()对直接调用的影响
Function.protype.bind()作用是将当前函数与指定的对象绑定,并返回一个新函数,这个函数无论以什么样的方式调用,其this始终指向绑定的对象
var obj={};
function test(){
console.log(this==obj);
}
var testObj = test.bind(obj);
test();//false
testObj();true
call()和apply()对this的影响
Function.protype.apply()和Function.protype.call()第一个参数指向函数运行时this指向,不过使用apply和call的时候仍然需要注意,如果目录函数本身是一个绑定了this对象的函数,那apply和call不会像预期那样执行,例
var obj = {};
function test(){
console.log(this===obj);
}
//绑定一个新对象
var testObj = test.bind({});
test.apply(obj);//true
testObj.apply(testObj);//false