call bind apply的作用,js继承call和apply

  call bind apply的作用,js继承call和apply

  本文主要描述了JS函数的调用、应用和绑定方法的超详细说明。感兴趣的朋友可以参考以下,希望能帮到你。

  

目录

   JS函数调用、应用和绑定方法1、call()方法1、call()方法的模拟实现2、apply()方法1、apply()方法的模拟实现

  三。bind()方法1。bind()方法4的模拟实现。摘要

  

JS 函数的 call、apply 及 bind 方法

  

一、call() 方法

  调用call()方法将从010到59000执行目标函数,并在函数内部改变这个方向。这是由方法的第一个参数决定的,从010到59000的任何参数都会作为目标函数的参数一一对应的传入。

  /*正常模式*/

  让obj={

  总和(a,b) {

  console.log(this)

  返回a b

  }

  }

  //执行sum函数的apply和bind方法,打印出来的this如下。

  Obj.sum.call() //打印窗口

  Obj.sum.call(undefined,1,2) //打印窗口

  Obj.sum.call(null,1,2) //打印窗口

  /*严格模式*/

  使用严格

  //执行sum函数的apply和bind方法,打印出来的this如下。

  Obj.sum.call() //打印未定义的

  Obj.sum.call(undefined,1,2) //打印未定义的

  Obj.sum.call(null,1,2) //打印null

  

1、call()方法的模拟实现

  立即

  逐个列举方法被添加到函数原型对象中。当目标函数调用这个方法时,myCall()方法中的this将指向目标函数。

  目标函数是作为上下文对象的方法执行的,所以目标函数内部的这个将指向上下文对象。

  从上下文对象中删除目标函数

  使用扩展运算符关键点: 处理引入目标函数的参数。

  在call()、apply()和bind()方法的模拟实现中,当第一个参数没有传递或者传递了undefined或null时,JS普通模式和strict模式是统一的,即目标函数中的this都指向window对象。

  myCall()

  function . prototype . my call=function(上下文,args) {

  if(上下文===未定义上下文===空){

  上下文=窗口

  }

  //下面的行为核心代码

  上下文. fn=this

  常量结果=context.fn(.参数)

  删除上下文。fn

  回送结果

  }

  设obj1={

  基本单位:1,

  总和(a,b) {

  console.log(this)

  归还这个

  }

  }

  设obj2={

  基本单位:9

  }

  console.log(obj1.sum.call(obj2,2,3)) //14

  console . log(obj 1 . sum . my call(obj 2,2,3)) //14

  

二、apply() 方法

  调用apply()方法将立即执行目标函数,并在函数内部改变目标函数的方向。这是由方法的第一个参数决定的,第二个参数是... 。每个数组元素或arguments对象所表示的参数将作为目标函数的参数一一对应地传入。

  

1、apply()方法的模拟实现

  代码如下:

  myApply()方法被添加到函数原型对象中。当目标函数调用这个方法时,myApply()方法中的this将指向目标函数。

  目标函数是作为上下文对象的方法执行的,所以目标函数内部的这个将指向上下文对象。

  从上下文对象中删除目标函数

  使用扩展运算符.处理传入目标函数的参数。

  参数数组或 arguments 对象

  function . prototype . myapply=function(context,args) {

  if(上下文===未定义上下文===空){

  上下文=窗口

  }

  //下面的行为核心代码

  上下文. fn=this

  常量结果=context.fn(.参数)

  删除上下文。fn

  回送结果

  }

  console . log(obj 1 . sum . apply(obj 2,[2,3])//14

  console . log(obj 1 . sum . my apply(obj 2,[2,3])//14

  

三、bind() 方法

  调用bind()方法将返回新函数3354的目标函数的副本。这个在函数内部指向方法的第一个参数,任何一个一个枚举的参数都会一一对应的作为目标函数的参数传入。之后,执行新功能就相当于执行目标功能。

  bind()方法实现了函数的科里化,所以可以向目标函数传递两次参数。第一个参数列在bind()方法的第一个参数之后,第二个参数列在new函数中。

  

1、bind() 方法的模拟实现

  关键点:

  myBind()方法被添加到函数原型对象中。当目标函数调用这个方法时,这个myBind()方法内部将指向目标函数。

  目标函数是作为上下文对象的方法执行的,所以目标函数内部的这个将指向上下文对象。

  从上下文对象中删除目标函数

  使用扩展运算符.处理输入目标函数的初始参数和后续参数。

  代码如下:

  function . prototype . my bind=function(上下文.initArgs) {

  if(上下文===未定义上下文===空){

  上下文=窗口

  }

  //缓存该值

  const _this=这个

  返回函数(.args) {

  //下面的行为核心代码

  context.fn=_this

  常量结果=context.fn(.initArgs,参数)

  删除上下文。fn

  回送结果

  }

  }

  console.log(obj1.sum.bind(obj2,2)(3)) //14

  console . log(obj 1 . sum . my bind(obj 2,2)(3)) //14

  

四、总结

  三种方法的异同:

  关键点:可以在执行目标功能时改变内部this的方向。

  方法的第一个参数用于在执行函数时指定此的内部值。

  支持向目标函数传递任意参数。

  如果不向方法的第一个参数传递值或undefined或null,在JavaScript普通模式下,target函数中的this指向window对象,在strict模式下,它分别指向undefined和null。

  代码如下:

  apply()方法可以接收两个参数,而call()和bind()方法可以接收多个参数。

  apply()方法在向目标函数传递参数时,只需要将参数数组或arguments对象作为方法的第二个参数,而call()和bind()方法则需要逐个列出参数。

  当调用call()和apply()方法时,将立即执行目标函数,而bind()方法则不会。它会返回一个新函数的目标函数的副本3354,其中this指向bind()方法的第一个参数,然后执行新函数就相当于执行目标函数。

  只有bind()方法实现了函数科里化,所以可以向目标函数传递两次参数。

  以上是JS函数的call、apply、bind方法的细节。关于JS函数的调用、应用和绑定方法的更多信息,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: