国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

javascript中call apply 的應用場景

2019-11-20 12:38:56
字體:
供稿:網(wǎng)友

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

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

1.

復制代碼 代碼如下:
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)容了,希望大家能夠喜歡。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 嘉义市| 自治县| 江达县| 棋牌| 呼图壁县| 黑河市| 峨眉山市| 东乡县| 巴林右旗| 旅游| 龙游县| 渭源县| 沙洋县| 宜兰市| 台东县| 昭苏县| 隆化县| 乡城县| 新兴县| 德阳市| 固始县| 英吉沙县| 新蔡县| 全椒县| 承德县| 泰来县| 尼勒克县| 常山县| 万安县| 怀宁县| 淮滨县| 巨野县| 上林县| 朝阳市| 阿拉善右旗| 高平市| 邵东县| 宁乡县| 巧家县| 长子县| 来安县|