前段時間回答的一個關於this的問題,便總結記錄下。
在javascript的函數中,除了聲明時定義的形參以外,每一個函數還能夠接收兩個附加的參數:this和arguments。這裏就講一下this的做用以及不一樣場景下它的不一樣指向。this的取值(即它的指向取決於調用的模式),在javascript中明確this指向大體有四種狀況:javascript
1.函數調用模式
的時候,this指向windowjava
function aa(){ console.log(this) } aa() //window
2.方法調用模式
的時候,this指向方法所在的對象segmentfault
var a={}; a.name = 'hello'; a.getName = function(){ console.log(this.name) } a.getName() //'hello'
3.構造函數模式
的時候,this指向新生成的實例app
function Aaa(name){ this.name= name; this.getName=function(){ console.log(this.name) } } var a = new Aaa('kitty'); a.getName() // 'kitty' var b = new Aaa('bobo'); b.getName() // 'bobo'
4.apply/call調用模式
的時候,this指向apply/call方法中的第一個參數函數
var list1 = {name:'andy'} var list2 = {name:'peter'} function d(){ console.log(this.name) } d.call(list1) // 'andy' d.call(list2) // 'peter'