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

首頁(yè) > 開發(fā) > JS > 正文

JavaScript中call和apply方法的區(qū)別實(shí)例分析

2024-05-06 16:45:32
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例分析了JavaScript中call和apply方法的區(qū)別。分享給大家供大家參考,具體如下:

這兩個(gè)方法不經(jīng)常用,但是在某些特殊場(chǎng)合中是非常有用的,下面主要說下它們的區(qū)別:

1、首先,JavaScript是一門面向?qū)ο蟮恼Z(yǔ)言,也就是說它有this的概念。而且JavaScript是一門動(dòng)態(tài)類型語(yǔ)言,為什么說它是動(dòng)態(tài)類型語(yǔ)言呢?因?yàn)镴avaScript在編譯時(shí)沒有類型檢查的過程,不會(huì)去檢查創(chuàng)建的對(duì)象類型,也不會(huì)去檢查傳遞的參數(shù)類型,所以它的變量類型在運(yùn)行期間是可以改變的。

2、要知道callapply都是為了改變某個(gè)函數(shù)運(yùn)行時(shí)的上下文(context)而存在的,也就是為了改變函數(shù),也可以說是對(duì)象(函數(shù)本身就是對(duì)象)內(nèi)部this的指向而存在的。

3、二者區(qū)別為:傳參數(shù)的方式不一樣,如下:

func.call(this, arg1, arg2);func.apply(this, [arg1, arg2]);

上面也很清楚了,call傳參數(shù)時(shí),明確知道時(shí)幾個(gè)參數(shù)或者參數(shù)較少時(shí),比如arg1arg2,挨個(gè)傳就是了;

apply第二個(gè)參數(shù)必須為一個(gè)數(shù)組,即將參數(shù)放進(jìn)數(shù)組中即可。

4、實(shí)例

(function(){ Array.prototype.push.call(arguments, 4);//arguments借用Array.prototype.push方法 console.log( arguments ); //輸出: [1, 2, 3, 4]})(1, 2, 3);var currying = function(fn){  var args = [];  return function(){    if( arguments.length === 0){      return fn.apply( this, args);    }    else{      [].push.apply( args, arguments);      return arguments.callee; //callee已棄用    }  }};var cost = (function(){ var money = 0; return function(0{   for(var i = 0,l - arguments.length;i<l;i++){     money += arguments[i];   }   return money; }})();

調(diào)用:

var cost_ = currying(cost); //將cost轉(zhuǎn)化成curring函數(shù)cost_(1); cost_(2); alert(cost_()); //輸出:3

解釋:通過currying(柯里化)的轉(zhuǎn)化,在cost_中傳入?yún)?shù)時(shí),未能得到值,而是將值存儲(chǔ)起來(lái),直到當(dāng)無(wú)參數(shù)傳入時(shí),輸出結(jié)果。

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JavaScript/Ajax教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 尉犁县| 闽侯县| 兴海县| 化州市| 峨眉山市| 宜阳县| 称多县| 抚顺县| 鹤山市| 沅陵县| 库尔勒市| 佛教| 微博| 泽普县| 新田县| 望江县| 黄浦区| 夏邑县| 凤台县| 大邑县| 玉环县| 桂阳县| 武隆县| 高碑店市| 璧山县| 南京市| 阿坝| 冀州市| 五河县| 方山县| 四子王旗| 鄂伦春自治旗| 洱源县| 松原市| 合江县| 巨鹿县| 进贤县| 靖州| 峡江县| 沧源| 南汇区|