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

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

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

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

call和apply的作用很簡單,就是改變上下文,適用場景太多了,雖然有時候只是為了“美觀”,下面幾個是我常用的。

1.

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

用來判斷 Obj 的類型

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

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

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

  var _privateFunction = function () {

  }

  window.Person = Person;

}).call(window);

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

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

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();
});

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

相關(guān)文章

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

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

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

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

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

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

    閉包是一個擁有許多變量和綁定了這些變量的環(huán)境的表達式(通常是一個函數(shù)),因而這些變量也是該表達式的一部分。相信很少有人能直接看懂這句話,因為他描述的太學術(shù)。其實這句話通俗的來說就是:JavaScript中所有的function都是一個閉包。
    2015-04-04
  • NodeJS的模塊寫法入門(實例代碼)

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

    前面提到了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ù)的方法有很多,有下退、上進、四舍五入等等,需要的朋友可以了解下本文
    2014-01-01
  • js防止表單重復(fù)提交實現(xiàn)代碼

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

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

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

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

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

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

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

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

    JS實現(xiàn)點擊圖片在當前頁面放大并可關(guān)閉的漂亮效果

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

最新評論

夏河县| 海城市| 贵阳市| 乌鲁木齐市| 绥德县| 芜湖县| 墨脱县| 平罗县| 太保市| 秦皇岛市| 延寿县| 陵川县| 商丘市| 星子县| 龙井市| 聊城市| 安徽省| 昌平区| 德江县| 玉林市| 余干县| 鸡西市| 太原市| 美姑县| 蕲春县| 井陉县| 红安县| 额尔古纳市| 林芝县| 汤原县| 寻甸| 海口市| 鄂伦春自治旗| 茂名市| 霍山县| 阳曲县| 桓台县| 横山县| 行唐县| 建宁县| 思茅市|