前端提高篇(十四)JS进阶10函数的call和apply
程序员文章站
2024-01-04 20:41:22
...
定义:将函数临时赋值到对象上,并执行
用法:
func.call(obj, arg1, arg2);
func.apply(obj, args);
其中,call传参时,是参数分开的;apply是将参数打包成一个数组args
call:
基本:
<script>
function add(a,b){
return a+b;
}
var obj = {};
console.log(add.call(obj, 1,3));
//相当于
obj.e = add;
console.log(obj.e(1,3));
delete obj.e;
</script>
操作对象里的值:
function add(){
return this.x + this.y;
}
var obj = {
x:1,
y:2
};
console.log('obj add',add.call(obj));
apply和call区别在于参数的传递:
function add2(a,b){return a+b;}
var obj = {};
console.log('apply:',add2.apply(obj,[2,3]));
console.log('call:',add2.call(obj,2,3));
运行结果:
第一个参数obj,传入之后会强制类型转换,转换成对象
function add2(){
console.log(this);
console.log(typeof this);
console.log(typeof 1);
}
add2.call(1);
传入的是简单的数字1,被强制转成Number{1},object
同理,如果传入的是字符串,也会被强制转成对象
function add2(){
console.log(this);
console.log(typeof this);
console.log(typeof '1');
}
add2.call('1');
应用场景:
初中高中收班服费用,初中男生一人100元,女生一人80元;高中男生一人120元,女生一人100元,求班级要交的费用
var obj1 = {
boy:100,
girl:90,
}//初中班级男女人数
var obj2 = {
boy:50,
girl:45,
}//高中班级男女人数
function money(boym, girlm){
//boym是男生班服价格
//girlm是女生班服价格
return this.boy * boym + this.girl * girlm;
}
console.log('初中:',money.call(obj1, 100,80));
console.log('高中:',money.call(obj2, 120,100));