JavaScrtipt在動態變換運行時會出現上下文特性, 在運行中,代碼老是有一個上下文對象,代碼處理在該對象以內. 上下文對象是經過this變量來體現的, 這個this變量永遠指向當前代碼所處的對象中.而動態改變方法所在的上下文this則須要使用apply和call方法。javascript
首先,這兩個方法的做用是同樣的,不一樣的只是表現方式,即傳入參數的形式不一樣。java
語法以下:數組
語法:app
foo.call([thisobj,arg1, arg2, arg2),接受多個參數,第一個爲執行上下文相關實例化對象(thisobj),第二個參數到最後一個參數做爲實際參數一個個傳給foo對象,函數
foo.apply(thisobj,[arg1,arg2,arg3]),apply最多接受兩個參數,第一個爲執行上下文相關實例化對象(thisobj),第二個爲參數數組,傳遞給foo對象。this
實際做用:這兩個方法能夠用來代替另外一個對象foo調用一個方法。call 方法可將一個函數的對象上下文從初始的上下文(foo)改變爲由 thisObj 指定的新對象。因此,整個過程當中,foo只爲提供一個方法,這個方法經過call和apply被thisobj調用了。指針
若是沒有提供 thisObj 參數,那麼 Global 對象被用做thisObj。說明白一點其實就是更改對象的內部指針,即改變對象的this指向的內容。 對象
【補充:javascript裏的this指針邏輯上的概念也是實例化對象,而javascript裏call和apply操做符能夠隨意改變this指向】ip