探究call到底是怎么回事来的

5 篇文章 0 订阅
这个其实用处不大,大家都知道怎么用,但是一般面试有可能问,并且现在前端越来越多,但是公司现在也是越来越挑了,那一般他感觉是不是你是中高级的怎么看,只能考察vue,react,promsise,bind()相关原理或者源码,当然这也是你自我提升的好办法
Function.prototype.textCall=function(context){
    //context有值得话就是a.call(foo)//代表context==foo
    context =  context || window
     //这个是this没有改变函数作用域的 a.call(foo)这个this代表的是a
    context.invokFn = this 
    //call也有可能传参数就像这样a.call(foo,1,2,3)那么我要获取[1,2,3]
    var args = [...arguments].slice(1)//这是es6扩展运算
    //这个是核心举个例子打家就懂了
    /*context={
        tempScope:function a(){

        }
    }//这样就是a里的this就是context也就是foo*/
    var result = context.invokFn(...args)
    //注意tempScope是临时的要把他删除,防止污染作用域
    Reflect.deleteProperty(context,'invokFn')//Rflect最大好处就是出现错误是不会报错,而是返回false
    return result

}

//最后验证一下
 function Product(name,age){
     this.name = name
     this.age = age
 }

 function Test(name,age){
     Product.textCall(this,name,age)
 }

 new Test('我是隔壁老王',30)

 console(Test.name,Test.age)//'我是隔壁老王',30
大家没事的话可以可以看看我之前的文章里面有许多关于原理的详解
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值