譯:理解並掌握 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
的方法的對象