Javascript中call與apply的學習筆記示例
先看MDN中對於call的解釋
call() 方法在使用一個指定的this值和若干個指定的參數值的前提下調用某個函數或方法.
注:該方法的作用和 apply() 方法類似,只有一個區別,就是call()方法接受的是若干個參數的列表,而apply()方法接受的是一個包含多個參數的數組。
語法
(thisArg[, arg1[, arg2[, ...]]])
參數
thisArg
在fun函數運行時指定的this值。需要注意的是,指定的this值並不一定是該函數執行時真正的this值,如果這個函數處於非嚴格模式下,則指定為null和undefined的this值會自動指向全局對象(瀏覽器中就是window對象),同時值為原始值(數字,字符串,布爾值)的this會指向該原始值的自動包裝對象。
arg1, arg2, ...
指定的參數列表。
MDN上的例子一開始並不是很好理解,這裏我貼出來,有興趣可以自己去看看 call-Javascript
這裏的thisArg解釋為在fun運行時指定的this值,也就是説使用了call後,fun中的this指向了thisArg?看代碼
var p="456"; function f1(){ this.p="123"; } function f2() { (this.p); } f2(); //456 (f1()); //123 y(f1()); //123
第一次輸出是調用的全局變量,之後由於call和apply的使用,f2中的this指向了f1,因此,輸出變成了123,其實也就是f1借用了f2的方法輸出了自己的p
這時將f1()中的'this.p刪除,會輸出三個456,也就證實了當this為null或者undefined時其實指向了全局變量
至於指向原始值是指向它的包裝對象這裏,由於我理解的包裝對象都是臨時的,而且測試時只輸出了原始值的類型而不是object,這裏如何證明如果有知道的朋友希望可以和我討論下,謝謝!
既然call可以實現一個對象借用另一個對象,不就可以實現繼承了麼?看代碼
function f1(){ er="father" } function f2() { (this); d="child"; } var test=new f2(); (er); //father
test中是沒有father的,由於f2()中的
(this);
這裏的this指向的就是f2,也就是f2借用了f1的方法,其實也就實現了繼承
下面講一下這裏的參數,這裏的參數是傳遞給fun的,看代碼吧
function f1(){ this.p="123"; } function f2(x) { (this.p); (x); } (f1(),456); //123 //456
先輸出123是因為f1中的p,之後的456是傳遞給f2的參數,很容易理解
主要是注意call和apply中參數的區別
call是一個一個傳入的,而apply是傳入的一個數組
function f1(){ this.p="測試call"; } function f2(x,y,z) { (this.p); (x); (y); (z); } function f3(){ this.p="測試apply"; } (f1(),4,5,6); (f1(),[4,5,6]); y(f3(),[4,5,6]); y(f3(),4,5,6);
這裏可以看到結果
第一段測試call是正確輸出
第二段測試call由於傳入數組,所以先輸出一個數組然後兩個undefined
第三段測試apply正確輸出
第四段由於參數格式錯誤直接報錯
這裏的區別應該很明顯了
-
如何理解Javascript的caller,callee,call,apply區別
在提到上述的概念之前,首先想説説javascript中函數的隱含參數:argumentsarguments該對象代表正在執行的函數和調用它的函數的參數。[function.]arguments[n]參數function:選項。當前正在執行的Function對象的名字。n:選項。要傳遞給Function對象的從0開始的參數值...
-
關於JavaScript學習筆記之Cookie對象
JavaScriptCookieCookie對象:Cookie是一種以文件的形式保存在客户端硬盤的Cookies文件夾中的'用户數據信息(Cookie數據)。Cookie文件由所訪問的Web站點建立,以長久的保存客户端與Web站點間的會話數據,並且該Cookie數據只允許被所訪問的Web站點進行讀取。Cookie文...
-
網站設計首頁要注意的事項
網站設計首頁的時候要注意些什麼?哪些是必須要注意的?下面就來和小編一起看看網站設計首頁要注意的事項吧。1.用户友好性:提高首頁的用户友好性,能夠大大增加留住用户的可能性,更進一步的`話則是能提高用户的黏着度,取得良好的用户轉化效益。而用户的友好性主要體...
-
javascript閉包的定義及應用實例分析
官方解釋“閉包”是一個擁有許多變量和綁定了這些變量的環境表達式(通常是一個函數),因而這些變量也是環境表達式的一部分。通俗解釋Javascript中所有的函數都是一個閉包。不過一般來説,嵌套的function產生的閉包更為強大,也是大部分時候我們所説的“閉包”。看如下...
相關文章
- 如何理解Javascript的caller,callee,call,apply區別
- 如何理解Javascript的caller,callee,call,apply區別
- 如何理解Javascript的caller,callee,call,apply區別
- 如何理解Javascript的caller,callee,call,apply區別
- 如何理解Javascript的caller,callee,call,apply區別
- 如何理解Javascript的caller,callee,call,apply區別
- 如何理解Javascript的caller,callee,call,apply區別
- 如何理解Javascript的caller,callee,call,apply區別
- 如何理解Javascript的caller,callee,call,apply區別
- 如何理解Javascript的caller,callee,call,apply區別