call、apply、bind函数封装

call函数

语法:call(Fn, obj, …args)
实现功能:执行Fn函数,改变函数内部this的指向,并将args参数传给Fn

  • 封装call函数
	function call(Fn, obj, ...args){
	    if (obj === null || obj === undefined) {
	    //如果这个函数处于非严格模式下,则指定为 null 或 undefined 时会自动替换为指向全局对象,
	        obj = globalThis;//globalThis为全局对象
	    }
	    obj.temp = Fn;
	    let result = obj.temp(...args);
	    delete obj.temp;
	    return result;
	}
  • 测试
		function demo(str){
            return str + " --- " + this.testName
        }
        let obj = {
            testName : "call函数测试"
        }
        window.testName = "全局变量"
        console.log(call(demo, obj, "hello"));
        console.log(call(demo, null, "hello"));

运行结果
在这里插入图片描述

apply函数

语法:apply(Fn, obj, args)
实现功能:执行Fn函数,改变函数内部this的指向,并将args 数组中的元素作为形参 传给Fn

  • 封装apply函数
		function apply(Fn, obj, args){
		    if (obj === null || obj === undefined) {
		        obj = globalThis;
		    }
		    obj.temp = Fn;
		    let result = obj.temp(...args);
		    delete obj.temp;
		    return result;
		}
  • 测试
		function demo(str){
            return str + " --- " + this.testName
        }
        let obj = {
            testName : "apply函数测试"
        }
        window.testName = "全局变量"

        console.log(apply(demo, obj, ["hello"]));
        console.log(apply(demo, null, ["hello"]));

运行结果
在这里插入图片描述

bind函数

语法:bind(Fn, obj, …args)
实现功能:Fn函数内部this指向改为obj,返回值为改变this指向后的新函数,并将args参数传给Fn

  • 封装bind函数
function bind(Fn, obj, ...args){
    return function(...args2){
        return call(Fn, obj, ...args, ...args2)
    };
}
  • 测试
        function demo(str){
            return str + " --- " + this.testName
        }
        let obj = {
            testName : "bind函数测试"
        }
        let newFn = bind(demo, obj, "hello");
        console.log(newFn());

        let newFn2 = bind(demo, obj);
        console.log(newFn2("hello222"));

        let newFn3 = bind(demo, obj, "hello33333");
        console.log(newFn3("hello333---444"));

运行结果
在这里插入图片描述
第三个输出说明
在这里插入图片描述

注意

  • call函数和apply函数会内部执行传入的函数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值