this是js的一個關鍵字,只能在函數內部使用,在函數運行時候自動生成的內部對象,表明函數運行時候的做用域指向,使用頻率極高!app
函數調用:js裏面規定當一個函數並不是某一個對象,直接調用的時候,稱之爲函數調用,此時this指向全局對象Global。函數
var t = 1; function test(){ console.log(this.t) } test() //1
方法調用:當一個函數做爲一個對象的屬性調用時候([fn]下標表達式或者.fn點表達式
)稱之爲方法調用,此時this指向這個對象。this
var t =1; var obj= { t:2, test :function(){ console.log(this.t) } } obj.test() // 2
做爲構造函數調用:var test = new fn()
的方式 稱fn爲test的構造函數,new的過程當中構造函數的this對象的屬性和方法將被加到新對象的屬性上
。code
function fn(){ this.t = 1 } var test = new fn(); test.t // 1 //fn的this對象會被加到新生成的test對象上
4:apply,call,bind方式調用:apply,call,bind均可以改變一個函數運行時候的this指向。對象
var t = 1 var test = function(){ console.log(this.t) } test() //1 test.call({t:2}) //2 test.apply({t:3})//3 test.bind({t:4})()//4
關於bind的分析,能夠看另外一篇文章:bind方法分析與實現作用域
看完了上面4種調用方式能夠得出一個結論
:this指向的做用域永遠是函數運行時候決定的
。io