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
的方法的对象
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。