欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

先看MDN中對(duì)于call的解釋

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

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

語(yǔ)法

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

參數(shù)
thisArg

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

arg1, arg2, ...

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

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

這里的thisArg解釋為在fun運(yùn)行時(shí)指定的this值,也就是說(shuō)使用了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

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

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

既然call可以實(shí)現(xiàn)一個(gè)對(duì)象借用另一個(gè)對(duì)象,不就可以實(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中是沒(méi)有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是一個(gè)一個(gè)傳入的,而apply是傳入的一個(gè)數(shù)組

  function f1(){ 
  this.p="測(cè)試call"; 
 } 
 function f2(x,y,z) { 
  console.log(this.p); 
  console.log(x); 
  console.log(y); 
  console.log(z); 
 } 
   function f3(){ 
  this.p="測(cè)試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é)果

第一段測(cè)試call是正確輸出

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

第三段測(cè)試apply正確輸出

第四段由于參數(shù)格式錯(cuò)誤直接報(bào)錯(cuò)

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    前端跨域問(wèn)題解決及七大跨域原理詳解

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

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

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

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

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

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

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

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

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

最新評(píng)論