在JS的面向對象中this
是表示函數
調用相關聯的對象(函數的上下文)。因此要想了解this
的指向,咱們先要清楚函數的調用的方式
1.做爲函數調用前端
function add(a,b) { return a + b; } add(1,2);
以上代碼就是函數做爲函數直接被調用,那麼在這種狀況下,函數上下文(this)就有兩種可能性質面試
window
對象undefined
2.做爲方法被調用數組
var method = {}; method.add = function () {}; method.add();
當一個函數被賦值給一個對象屬性
,而且經過對象屬性引用的方式時候,函數就會被做爲對象的方法被調用。那麼在這種狀況下,this
指向的就是引用該方法的宿主對象瀏覽器
3.做爲構造函數調用app
let person = new Person();
在使用new
的時候會有以下動做函數
this
參數傳遞給構造函數,成爲構造函數的上下文new
的返回值4.使用call
,apply
方法調用this
function arguNum() { var result = 0; for(var i = 0; i < arguments.length; i++) { result += arguments[i]; } this.result = result; } var obj1 = {}; var obj2 = {}; arguNum.apply(obj1, [1,2,3]); // 6 arguNum.call(obj2, 1,2,3); // 6
使用call
,apply
能夠改變this
的指向,call&apply區別在於傳遞的參數是經過什麼方式,call傳遞的是參數列表,apply傳遞的是一個數組。code
關於this的指向是前端面試中常常出現的問題,以上只是暫時簡短總結了一下結果而已,後面會對各個函數調用的方式進行深刻解析。對象