最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript中call與apply的學(xué)習(xí)筆記

 更新時間:2014年09月22日 11:39:19   投稿:hebedich  
經(jīng)常看到這倆哥們,看來看去都是講他們的區(qū)別,一直沒搞太清楚作用究竟是什么,現(xiàn)在記錄下自己理解,有錯的話希望指出!

先看MDN中對于call的解釋

call() 方法在使用一個指定的this值和若干個指定的參數(shù)值的前提下調(diào)用某個函數(shù)或方法.

注:該方法的作用和 apply() 方法類似,只有一個區(qū)別,就是call()方法接受的是若干個參數(shù)的列表,而apply()方法接受的是一個包含多個參數(shù)的數(shù)組。

語法

fun.call(thisArg[, arg1[, arg2[, ...]]]) 

參數(shù)
thisArg

在fun函數(shù)運行時指定的this值。需要注意的是,指定的this值并不一定是該函數(shù)執(zhí)行時真正的this值,如果這個函數(shù)處于非嚴(yán)格模式下,則指定為null和undefined的this值會自動指向全局對象(瀏覽器中就是window對象),同時值為原始值(數(shù)字,字符串,布爾值)的this會指向該原始值的自動包裝對象。

arg1, arg2, ...

指定的參數(shù)列表。

MDN上的例子一開始并不是很好理解,這里我貼出來,有興趣可以自己去看看 call-Javascript

這里的thisArg解釋為在fun運行時指定的this值,也就是說使用了call后,fun中的this指向了thisArg?看代碼

 var p="456"; 
 function f1(){ 
  this.p="123"; 
 } 
 function f2() { 
  console.log(this.p); 
 } 
 f2();       //456  f2.call(f1());  //123  f2.apply(f1());  //123

第一次輸出是調(diào)用的全局變量,之后由于call和apply的使用,f2中的this指向了f1,因此,輸出變成了123,其實也就是f1借用了f2的方法輸出了自己的p

這時將f1()中的this.p刪除,會輸出三個456,也就證實了當(dāng)this為null或者undefined時其實指向了全局變量

至于指向原始值是指向它的包裝對象這里,由于我理解的包裝對象都是臨時的,而且測試時只輸出了原始值的類型而不是object,這里如何證明如果有知道的朋友希望可以和我討論下,謝謝!

既然call可以實現(xiàn)一個對象借用另一個對象,不就可以實現(xiàn)繼承了么?看代碼

 function f1(){ 
  this.father="father"
 } 
 function f2() { 
  f1.call(this); 
  this.child="child"; 
 } var test=new f2(); 
console.log(test.father);  //father

test中是沒有father的,由于f2()中的

 f1.call(this);

這里的this指向的就是f2,也就是f2借用了f1的方法,其實也就實現(xiàn)了繼承

下面講一下這里的參數(shù),這里的參數(shù)是傳遞給fun的,看代碼吧

 function f1(){ 
  this.p="123"; 
 } 
 function f2(x) { 
  console.log(this.p); 
  console.log(x); 
 } 
 f2.call(f1(),456);   //123 
//456

先輸出123是因為f1中的p,之后的456是傳遞給f2的參數(shù),很容易理解

主要是注意call和apply中參數(shù)的區(qū)別

call是一個一個傳入的,而apply是傳入的一個數(shù)組

  function f1(){ 
  this.p="測試call"; 
 } 
 function f2(x,y,z) { 
  console.log(this.p); 
  console.log(x); 
  console.log(y); 
  console.log(z); 
 } 
   function f3(){ 
  this.p="測試apply"; 
 } 
 f2.call(f1(),4,5,6);  
 f2.call(f1(),[4,5,6]);  
 f2.apply(f3(),[4,5,6]); 
 f2.apply(f3(),4,5,6);

這里可以看到結(jié)果

第一段測試call是正確輸出

第二段測試call由于傳入數(shù)組,所以先輸出一個數(shù)組然后兩個undefined

第三段測試apply正確輸出

第四段由于參數(shù)格式錯誤直接報錯

這里的區(qū)別應(yīng)該很明顯了

相關(guān)文章

  • JavaScript 更嚴(yán)格的相等 [譯]

    JavaScript 更嚴(yán)格的相等 [譯]

    大部分JavaScript程序員都知道:應(yīng)該使用嚴(yán)格相等(===)來代替“普通”的相等操作(==).但是,有時候你的確需要一個比嚴(yán)格相等===更嚴(yán)格的運算符,比如說:在你想檢查某個值是否是NaN的時候,又或者你想?yún)^(qū)分-0和+0的時候.本文解釋了相關(guān)的知識以及ECMAScript.next中的解決辦法:“is”操作符
    2012-09-09
  • 通過實例理解javascript中沒有函數(shù)重載的概念

    通過實例理解javascript中沒有函數(shù)重載的概念

    這篇文章主要介紹了通過實例理解javascript中沒有函數(shù)重載的概念,十分的簡單易懂,需要的朋友可以參考下
    2015-06-06
  • JavaScript實現(xiàn)密碼框輸入驗證

    JavaScript實現(xiàn)密碼框輸入驗證

    這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)密碼框輸入驗證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • JS實現(xiàn)的全選、全不選及反選功能【案例】

    JS實現(xiàn)的全選、全不選及反選功能【案例】

    這篇文章主要介紹了JS實現(xiàn)的全選、全不選及反選功能,涉及javascript事件響應(yīng)、元素遍歷與屬性動態(tài)操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-02-02
  • JavaScript 輪播圖和自定義滾動條配合鼠標(biāo)滾輪分享代碼貼

    JavaScript 輪播圖和自定義滾動條配合鼠標(biāo)滾輪分享代碼貼

    本文給大家分享一段js輪播圖和自定義滾動條的代碼片段,布局和樣式小編沒給大家多介紹,大家可以根據(jù)個人需求優(yōu)化,具體實現(xiàn)代碼,大家可以參考下面代碼片段
    2016-10-10
  • 詳解JavaScript Alert函數(shù)執(zhí)行順序問題

    詳解JavaScript Alert函數(shù)執(zhí)行順序問題

    本文主要介紹了Javascript的Alert函數(shù)執(zhí)行順序問題,對此感興趣的同學(xué),可以實驗一下,以便解決平時遇到的一些奇怪的問題。
    2021-05-05
  • JavaScript?element的Form表單生成方式

    JavaScript?element的Form表單生成方式

    這篇文章主要介紹了JavaScript?element的Form表單生成方式,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 在Javascript中定義對象類別

    在Javascript中定義對象類別

    在Javascript中定義對象類別...
    2006-12-12
  • 微信小程序scroll-view橫向滑動嵌套for循環(huán)的示例代碼

    微信小程序scroll-view橫向滑動嵌套for循環(huán)的示例代碼

    這篇文章主要介紹了微信小程序scroll-view橫向滑動嵌套for循環(huán)的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • js 中的switch表達(dá)式使用示例

    js 中的switch表達(dá)式使用示例

    switch 這種表達(dá)式在很多語言中都有,比如java, C等待, 使用switch比使用if else 來得方便,來得清晰,下面為大家詳細(xì)介紹下其具體的使用,感興趣的朋友可以參考下
    2013-09-09

最新評論

陵川县| 墨江| 资溪县| 郴州市| 郴州市| 丹阳市| 广元市| 上虞市| 富阳市| 鄄城县| 凌云县| 渭南市| 剑阁县| 凯里市| 资阳市| 茂名市| 郓城县| 杭州市| 金山区| 龙胜| 威宁| 昭通市| 广安市| 凤台县| 平安县| 中山市| 广南县| 武穴市| 鹿泉市| 增城市| 临夏市| 阳曲县| 呼玛县| 泾源县| 晋城| 米脂县| 浪卡子县| 五华县| 鸡泽县| 林甸县| 青州市|