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

javascript中call apply 的應(yīng)用場(chǎng)景

 更新時(shí)間:2015年04月16日 11:23:58   投稿:hebedich  
call, apply都屬于Function.prototype的一個(gè)方法,它是JavaScript引擎內(nèi)在實(shí)現(xiàn)的,因?yàn)閷儆贔unction.prototype,所以每個(gè)Function對(duì)象實(shí)例,也就是每個(gè)方法都有call, apply屬性.

在一些jQuery插件中經(jīng)常看到類似 callback.call(xxx,xxx) 雖然看到書上有介紹 說(shuō)call和apply函數(shù)可以改變作用域,但還是無(wú)法非常透徹的理解改變作用域主要是為了解決什么問(wèn)題,有沒(méi)有替代方案,或者 這2個(gè)函數(shù)主要為了解決什么問(wèn)題,應(yīng)用場(chǎng)景,何時(shí)使用最合適,每次讀到這樣的代碼就暈了,一下子從線性閱讀中跳出去了,感覺(jué)有點(diǎn)繞

call和apply的作用很簡(jiǎn)單,就是改變上下文,適用場(chǎng)景太多了,雖然有時(shí)候只是為了“美觀”,下面幾個(gè)是我常用的。

1.

復(fù)制代碼 代碼如下:
Object.prototype.toString.call(Obj)

用來(lái)判斷 Obj 的類型

arguments 雖然和Array 很像,但是他沒(méi)有Array的push之類的方法,怎么辦?
Array.prototype.push.call(arguments)

3.Javascript 沒(méi)有私有方法的概念,想用閉包實(shí)現(xiàn)

(function () {
  var Person = function () {
    this.doSomeThing = function () {
      _privateFunction.call(this);
    }
  }

  var _privateFunction = function () {

  }

  window.Person = Person;

}).call(window);

差不多就是這個(gè)意思,callback的時(shí)候,當(dāng)你希望你的callback中的上下文是當(dāng)前上下文的時(shí)候,也可以用call或者apply,有什么好處呢?

這個(gè)時(shí)候你的callback 里面的this 就是指代當(dāng)前上下文。例如一個(gè)類Person,然后他的方法 say 有一個(gè)callback的參數(shù),如果這個(gè)callback是通過(guò)普通的括號(hào)來(lái)執(zhí)行的話,那在這個(gè)callback里面執(zhí)行person的其它方法還需要用person.other 來(lái)實(shí)現(xiàn),但是切換上下文之后,就是this.other搞定~代碼對(duì)比如下:

var Person = function(){

};

Person.prototype.say = function(callback){
  callback();
};

Person.prototype.other = function(){

};

var vincent = new Person();

vincent.say(function(){
  vincent.other();
});

用了call的:

var Person = function(){

};

Person.prototype.say = function(callback){
  callback.call(this);
};

Person.prototype.other = function(){

};

var vincent = new Person();

vincent.say(function(){
  this.other();
});

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • JS動(dòng)態(tài)創(chuàng)建Table,Tr,Td并賦值的具體實(shí)現(xiàn)

    JS動(dòng)態(tài)創(chuàng)建Table,Tr,Td并賦值的具體實(shí)現(xiàn)

    這篇文章介紹了JS動(dòng)態(tài)創(chuàng)建Table,Tr,Td并賦值的具體實(shí)現(xiàn),有需要的朋友可以參考一下
    2013-07-07
  • javascript 面向?qū)ο蠓庋b與繼承

    javascript 面向?qū)ο蠓庋b與繼承

    本文是對(duì)自己這么長(zhǎng)時(shí)間以來(lái)學(xué)習(xí)javascript面向?qū)ο蟮目偨Y(jié),這里針對(duì)封裝和繼承結(jié)合實(shí)例進(jìn)行了詳細(xì)分析,給有相同需求的小伙伴們參考下吧。
    2014-11-11
  • js閉包實(shí)現(xiàn)按秒計(jì)數(shù)

    js閉包實(shí)現(xiàn)按秒計(jì)數(shù)

    閉包是一個(gè)擁有許多變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個(gè)函數(shù)),因而這些變量也是該表達(dá)式的一部分。相信很少有人能直接看懂這句話,因?yàn)樗枋龅奶珜W(xué)術(shù)。其實(shí)這句話通俗的來(lái)說(shuō)就是:JavaScript中所有的function都是一個(gè)閉包。
    2015-04-04
  • NodeJS的模塊寫法入門(實(shí)例代碼)

    NodeJS的模塊寫法入門(實(shí)例代碼)

    前面提到了NodeJS的命令行和Web版之“Hello,World”。命令行是直接執(zhí)行hello.js文件,Web版的需要require http模塊。http模塊是NodeJS自身提供的
    2012-03-03
  • js中小數(shù)轉(zhuǎn)換整數(shù)的方法

    js中小數(shù)轉(zhuǎn)換整數(shù)的方法

    js中小數(shù)轉(zhuǎn)換整數(shù)的方法有很多,有下退、上進(jìn)、四舍五入等等,需要的朋友可以了解下本文
    2014-01-01
  • js防止表單重復(fù)提交實(shí)現(xiàn)代碼

    js防止表單重復(fù)提交實(shí)現(xiàn)代碼

    重復(fù)提交、重復(fù)刷新、防止后退等等都是屬于系統(tǒng)為避免重復(fù)記錄而需要解決的問(wèn)題,在客戶端去處理需要針對(duì)每一種的可能提出相應(yīng)的解決方案,然而在服務(wù)器端看來(lái)只不過(guò)是對(duì)于數(shù)據(jù)真實(shí)性的檢驗(yàn)問(wèn)題
    2012-09-09
  • JS 控制非法字符的輸入代碼

    JS 控制非法字符的輸入代碼

    JS控制非法字符的輸入實(shí)現(xiàn)代碼,需要的朋友可以參考下。
    2009-12-12
  • Javascript的promise,async和await的區(qū)別詳解

    Javascript的promise,async和await的區(qū)別詳解

    這篇文章主要為大家詳細(xì)介紹了Javascript的promise,async和await的區(qū)別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • dispatchEvent解決重疊元素響應(yīng)事件示例詳解

    dispatchEvent解決重疊元素響應(yīng)事件示例詳解

    這篇文章主要為大家介紹了dispatchEvent解決重疊元素響應(yīng)事件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • JS實(shí)現(xiàn)點(diǎn)擊圖片在當(dāng)前頁(yè)面放大并可關(guān)閉的漂亮效果

    JS實(shí)現(xiàn)點(diǎn)擊圖片在當(dāng)前頁(yè)面放大并可關(guān)閉的漂亮效果

    點(diǎn)擊圖片在當(dāng)前頁(yè)面放大的漂亮效果實(shí)現(xiàn)方法有很多,在本文將為大家介紹下使用Lightbox JS是如何實(shí)現(xiàn)的,感興趣的朋友不要錯(cuò)過(guò)
    2013-10-10

最新評(píng)論

旬邑县| 高雄市| 安陆市| 咸阳市| 德昌县| 塔河县| 察隅县| 永吉县| 武胜县| 德惠市| 阿克陶县| 苍山县| 噶尔县| 阜阳市| 大竹县| 方山县| 内黄县| 凉山| 织金县| 曲周县| 临桂县| 丹东市| 宜春市| 北辰区| 论坛| 株洲县| 康保县| 鹿泉市| 民和| 竹溪县| 金昌市| 兴文县| 南部县| 万山特区| 石阡县| 平果县| 洛隆县| 府谷县| 县级市| 平江县| 孙吴县|