javascript中的this
关键
只有一个对象调用了包含this函数时,this才被赋值,并且所赋的值只依赖于调用了包含this函数的对象
使用原则
this永远指向一个对象,并且拥有着个对象的值在严格模式下,在全局作用域中和匿名函数中,
this指向undefined当
this在一个函数内出现的时候,this指向调用这个函数的对象
易错场景
-
包含
this的方法被当作回调函数$("button").click(callback);期待
this指向:包含该方法的对象实际
this指向:调用了回调函数的对象解决办法:
bind -
this出现在闭包内... example: function(){ [1,2,3,4].forEach(function(item){ this.test(item) }) } ...期待
this指向:外层函数的this指向实际
this指向:undefined或者全局对象解决办法:使用另外一个变量保存
this值 -
把包含
this的方法赋给一个变量var user = { name: 'hhh', sayName: function(){ console.log(this.name); } } var test = user.sayName; test();// 全局变量的this期待
this指向:包含该方法的对象实际
this指向:包含该变量的对象解决办法:
bind 借用包含
this的方法
var user1 = {
name: 'hhh',
sayName: function(){
console.log(this.name);
}
}
var user2 = {
name: 'ggg'
}
user2.ggg = user1.sayName();//
期待`this`指向:借用`this`方法的对象
实际`this`指向:包含该`this`方法的对象
解决办法:`apply`
this的使用是一个经常容易出错的地方,但是只要把握一个原则,即
this总是指向调用包含this的方法的对象


