call、apply、bind用法
1.call
// 作家
var Writer = {
income:0, // 收入
record:[], // 收录/明细
compute(){
var arg = arguments;
for(var i = 0; i < arg.length; i++){
var item = arg[i];
for (const key in item) {
if (item.hasOwnProperty(key)) {
this.income += item[key];
}
}
this.record.push(item); //添加每一笔收入的明细
}
}
}
Writer.compute({'盗墓笔记':100},{'从你的全世界路过':200},{'那些年追过的女孩':300});
// 画家
var Painter = {
income:0,
record:[], // 收录/明细
}
Writer.compute.call(Painter,{'大自然写生':300},{'海':20},{'树':77})
2.apply
// 题目
var testArr = [];
for(var i = 0; i < 5; i++){
testArr.push(i);
}
var a = [3333];
a.push(...testArr);
a.push.apply(a,testArr)
3.bind和call的区别
bind:1.改变函数作用域 2.返回一个新函数
eg:
var obj = {name:'obj'}
var bindHandle = handle.bind(obj)
function handle(){
console.log(arguments.callee)
console.log(this.name);
document.body.removeEventListener('click',arguments.callee);
}
document.body.addEventListener('click',handle.bind(obj))
call:执行函数
handle.bind(obj);