JavaScript --- apply和call

// 今天講什么?

//思考:運(yùn)行時(shí)時(shí)如何動(dòng)態(tài)交換倆個(gè)方法的? this是js的一個(gè)動(dòng)態(tài)指針? ? 所以這倆個(gè)方法本質(zhì)要明白 在看看運(yùn)行時(shí)

// call() 和 apply() 這兩個(gè)方法

/*思考一個(gè)問(wèn)題?*/

/*有倆個(gè)人 冬冬 和 麗麗 或者理解為倆個(gè)對(duì)象 他們有各自的一些方法(方法就是函數(shù));*/

/*現(xiàn)在他們想互相使用對(duì)方的的方法做一些事情 或者 達(dá)到一個(gè)目的 怎樣才能互相使用對(duì)方的方法呢?

* 答案就是借用一下對(duì)方的方法

*

* */

/*

call()方法: 語(yǔ)法:call( thisObj , arg1 , arg2 ,argN) 定義:調(diào)用一個(gè)對(duì)象的一個(gè)方法,以另一個(gè)對(duì)象替換當(dāng)前對(duì)象。

這里的的參數(shù)除過(guò)第一個(gè) 后面的參數(shù)可以傳任何類型的數(shù)據(jù)

apply()方法: 語(yǔ)法:apply(thisObj [argArray])定義:應(yīng)用某一對(duì)象的一個(gè)方法,用另一個(gè)對(duì)象替換當(dāng)前對(duì)象。

這里的參數(shù)第二個(gè)只可以傳遞數(shù)組

總結(jié) 這兩個(gè)方法的功能是一模一樣的 就是傳遞參數(shù)的方式不同

是函數(shù)的一個(gè)方法 所有的函數(shù)都可以調(diào)用也只能是函數(shù)對(duì)象去調(diào)用

*/

/*

var ll = {

getName:function(){

console.log(this);

console.log("我是麗麗");

}

};

var dd = {

getInfo:function () {

console.log('我是冬冬');

}

}*/

// ll.getName();

// 后面的dd 借用前面ll方法 有一個(gè)法叫供爺法則

// ll.getName.call(dd); // 這里是dd借用了ll的方法 此時(shí)也改變了this的指向 指向了dd /*dd.getName()*/

// 函數(shù)也是對(duì)象

function add(a,b){

console.log(arguments)

console.log(this);

console.log(a+b);

}

function sub(a,b){

console.log(a-b);

}

// add(1,2) // 3 window 調(diào)用的 window.add(1,2)

// window.add.call(sub,3,4); // 7 這里傳遞參數(shù)是一個(gè)一個(gè)傳遞的

//

// add.apply(sub,[3,4]);

// 這里sub對(duì)象 借用了window對(duì)象的add方法 此時(shí)this就指向了sub這個(gè)對(duì)象

// 我們先從Math.max()函數(shù)說(shuō)起.

// Math.max() 里面可以傳遞任意個(gè)數(shù)值類型的參數(shù) 最后返回所有參數(shù)中的最大值 比如

/* Math.max(1,2,3) // 3

Math.max(2,5,7,8,9) // 9*/

/*function max(){

console.log(arguments);

var temp = arguments[0];

for (var i = 0; i < arguments.length; i++) {

if (temp

temp = arguments[i];

}

}

return temp;

}

console.log(max(1, 2, 3));*/

//科普arguments對(duì)象 arguments對(duì)象其實(shí)是一個(gè)偽數(shù)組

// 現(xiàn)在思考一個(gè)問(wèn)題? 怎樣快速得到一個(gè)數(shù)組中的最大值

// 傳統(tǒng)做法

/* function getMax(arr){

var temp = arr[0];

for (var i = 0; i < arr.length; i++) {

temp = Math.max(temp,arr[i]);

}

return temp;

}

var arr = [2,33,3,4,22,99];

console.log(getMax(arr));*/

/*call, apply方法區(qū)別是,從第二個(gè)參數(shù)起, call方法參數(shù)將依次傳遞給借用的方法作參數(shù),

而apply直接將這些參數(shù)放到一個(gè)數(shù)組中再傳遞, 最后借用方法的參數(shù)列表是一樣的.

這樣輕易的可以得到一個(gè)數(shù)組中最大的一項(xiàng)。(apply會(huì)將一個(gè)數(shù)組轉(zhuǎn)換為一個(gè)參數(shù)接一個(gè)參數(shù)的傳遞給方法)*/

/*

var arr = [2,33,3,4,22,99];

var maxNum=Math.max.apply(Math,arr) // 這里沒(méi)有修改this的指向 只是利用max這個(gè)方法

console.log(maxNum);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容