zoukankan      html  css  js  c++  java
  • 浅谈javascript中的call与apply方法

      call方法与apply方法都是为了改变函数体内部this的指向。

      call方法与apply方法,这二者的作用完全一样,只是接受参数的方式不太一样。

      apply()方法:

      Function.apply(obj,args)

      obj将代替Function里的this对象。

      args表示一个数组或者类数组。apply方法把这个集合中的元素作为参数传递给被调用的函数

      call()方法中的第一个参数与apply方法一样,只不过第二个参数则是一个参数列表。

      这里有一点要强调的是,在非严格模式下,当我们第一个参数传递为null或undefined时,函数体内的this会指向默认的宿主对象,在浏览器中则是window

      

      下面来举一个call与apply方法的小例子。

      

      这个例子也许比较简单,再来举另外一个例子:

      

      再来说另外一个知识点。曾经我以为arguments是一个数组,可是今天我才发现,我错了,arguments其实是一个类数组,这里用实例来说明。

      

      可以看出arguments并不具有push方法。

      那么什么是类数组呢?类数组具有以下条件:

      (1)、具有length属性。

      (2)、按索引方式存储数据。

      (3)、不具有数组的push、pop等方法。

      如果这里非要使用push方法,我们可以使用call或者apply方法,那么上面的例子可以稍加修改。

      

      

      总结:

      (1)、每个函数都包含两个非继承而来的方法,即call()方法与apply()方法。

      (2)、call()方法与apply()方法作用相同,都是在特定的作用域中调用函数。

      (3)、接收参数方面不同,apply()接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。而call()方法第一个参数与apply()方法相同,但传递给函数的参数必须列举出来。

     

  • 相关阅读:
    remote: You are not allowed to push code to this project
    Ubuntu 查看本机的ip
    git跟踪远程分支,查看本地分支追踪和远程分支的关系
    edgedb 基本试用
    influxdb 全家桶运行
    Introducing Outflux: a smart way out of InfluxDB
    使用outflux 导入influxdb 的数据到timescaledb
    edgedb 强大的对象关系数据库
    Announcing the Operate Preview Release: Monitoring and Managing Cross-Microservice Workflows
    goaccess iis w3c 自定义log 格式参考
  • 原文地址:https://www.cnblogs.com/jf-67/p/7207674.html
Copyright © 2011-2022 走看看