亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

arg1, arg2, ...

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

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

這里的thisArg解釋為在fun運(yùn)行時指定的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,其實(shí)也就是f1借用了f2的方法輸出了自己的p

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

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

既然call可以實(shí)現(xiàn)一個對象借用另一個對象,不就可以實(shí)現(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的方法,其實(shí)也就實(shí)現(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是因?yàn)閒1中的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ù)格式錯誤直接報(bào)錯

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

相關(guān)文章

  • JavaScript如何將時間戳轉(zhuǎn)化為年月日時分秒格式

    JavaScript如何將時間戳轉(zhuǎn)化為年月日時分秒格式

    這篇文章主要給大家介紹了關(guān)于JavaScript如何將時間戳轉(zhuǎn)化為年月日時分秒格式的相關(guān)資料,在前端的日常工作當(dāng)中,時間戳的使用也是不少的,有時后端返回給我們的數(shù)據(jù)是一個時間戳,我們需要轉(zhuǎn)換成年月日,時分秒的形式展示在頁面當(dāng)中,需要的朋友可以參考下
    2023-11-11
  • javascript 處理HTML元素必須避免使用的一種方法

    javascript 處理HTML元素必須避免使用的一種方法

    我們在編寫前臺頁面的時候,可能經(jīng)常會用到“javascript+數(shù)據(jù)”生成頁面元素的方法,但當(dāng)我們要處理的數(shù)據(jù)量較大,導(dǎo)致頁面需要展現(xiàn)過多的控件的時候,頁面的響應(yīng)速度也會直線下降
    2009-07-07
  • JavaScript實(shí)現(xiàn)的經(jīng)典文件樹菜單效果

    JavaScript實(shí)現(xiàn)的經(jīng)典文件樹菜單效果

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)的經(jīng)典文件樹菜單效果,通過JavaScript結(jié)合json數(shù)組實(shí)現(xiàn)文件樹菜單的效果,非常簡單實(shí)用,需要的朋友可以參考下
    2015-09-09
  • JavaScript在網(wǎng)頁中畫圓的函數(shù)arc使用方法

    JavaScript在網(wǎng)頁中畫圓的函數(shù)arc使用方法

    這篇文章主要介紹了JavaScript在網(wǎng)頁中畫圓的函數(shù)arc使用方法的相關(guān)資料,需要的朋友可以參考下
    2015-11-11
  • 基于JavaScript概括瀏覽器方向的優(yōu)化

    基于JavaScript概括瀏覽器方向的優(yōu)化

    這篇文章主要介紹了JavaScript瀏覽器方向的優(yōu)化,文章圍繞主題展開詳細(xì)的內(nèi)容介紹具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • 前端跨域問題解決及七大跨域原理詳解

    前端跨域問題解決及七大跨域原理詳解

    這篇文章主要為大家介紹了前端跨域問題的解決及七大跨域原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-02-02
  • jscript讀寫二進(jìn)制文件的方法

    jscript讀寫二進(jìn)制文件的方法

    這篇文章主要介紹了jscript讀寫二進(jìn)制文件的方法,涉及javascript中ActiveXObject對象的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • 原生js的ajax和解決跨域的jsonp(實(shí)例講解)

    原生js的ajax和解決跨域的jsonp(實(shí)例講解)

    下面小編就為大家?guī)硪黄鷍s的ajax和解決跨域的jsonp(實(shí)例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • JavaScript生成帶有縮進(jìn)的表格代碼

    JavaScript生成帶有縮進(jìn)的表格代碼

    這篇文章主要介紹了JavaScript生成有縮進(jìn)的表格代碼的相關(guān)資料,代碼簡單易懂,非常具有參考價值,需要的朋友可以參考下
    2016-06-06
  • JavaScript遞歸操作實(shí)例淺析

    JavaScript遞歸操作實(shí)例淺析

    這篇文章主要介紹了JavaScript遞歸操作,由一個階乘問題開始分析了遞歸操作的原理、實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-10-10

最新評論