欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

前端提高篇(十四)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>

前端提高篇(十四)JS进阶10函数的call和apply
操作对象里的值:

    function add(){
        return this.x + this.y;
    }
    var obj = {
        x:1,
        y:2
    };
    console.log('obj add',add.call(obj));

前端提高篇(十四)JS进阶10函数的call和apply
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));

运行结果:
前端提高篇(十四)JS进阶10函数的call和apply

第一个参数obj,传入之后会强制类型转换,转换成对象

    function add2(){
        console.log(this);
        console.log(typeof this);
        console.log(typeof 1);
    }
    add2.call(1);

前端提高篇(十四)JS进阶10函数的call和apply

传入的是简单的数字1,被强制转成Number{1},object

同理,如果传入的是字符串,也会被强制转成对象

    function add2(){
        console.log(this);
        console.log(typeof this);
        console.log(typeof '1');
    }
    add2.call('1');

前端提高篇(十四)JS进阶10函数的call和apply

应用场景:
初中高中收班服费用,初中男生一人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));

前端提高篇(十四)JS进阶10函数的call和apply

上一篇:

下一篇: