// 今天講什么?
//思考:運(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);