译:理解并掌握 JavaScript 中 this 的用法javascript
只有一个对象调用了包含this
函数时,this
才被赋值,而且所赋的值只依赖于调用了包含this
函数的对象java
this
永远指向一个对象,而且拥有着个对象的值闭包
在严格模式下,在全局做用域中和匿名函数中,this
指向undefined
app
当this
在一个函数内出现的时候,this
指向调用这个函数的对象函数
包含this
的方法被看成回调函数this
$("button").click(callback);
期待this
指向:包含该方法的对象code
实际this
指向:调用了回调函数的对象对象
解决办法:bind
ip
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
的方法的对象