`

想起温习一下JS中的this apply call arguments

阅读更多


很多时候讲到语言入门,大家会认为就是要了解一下语言的语法、数据类型和常用函数。这一课对于所有的计算机专业的毕业生来说都可以自学,然而在 最近的实践中(带了两个实习生自学js),我发现他们在学习js的时候会被这几个问题困扰:this指向、arguments为什么不是Array、 apply的用途及如何实现。写这篇文章是为了减少js新手被这几个问题困扰的时间,希望给js新手一点帮助。

  1. this
    1. 指向当前对象,通常在对象的构造函数中使用,用来引用对象。如
      function Person(name){
          this.name = name
      }
      var o = new Person('lisq')
      这里this就指向o
    2. 对 于JScript 的客户版本,如果在其他所有对象的上下文之外使用,则它指的是window对象
      Person('lisq')
      这里 this就指向window
      alert(window.name) 或者 alert(name)
  2. arguments
    1. 该对象代表正在执行的函数和调用它的函数的参数。如
      function Person(name){
          alert(arguments.length)  //当前调用传递的几个参数
      }
      alert(Person.length)    //函数定义(期望)传递几个参数
    2. 需要说明的是arguments并不是一个数组,可用instanceof测试。
      alert(arguments instanceof Array) //false
      这一点和document.getElementsByTagName很像,它返回的也不 是数组,但是具有length并且可以用索引访问每一个元素。所以在需要范围arguments中的一部分的时候,会联想到数组的slice,但是又不能 直接用arguments.slice(0, 2),只能用Array.prototype.slice.apply(arguments, [0, 2]),这里简单说一下Prototype中的$A,它可以把arguments强制转为一个数组对象,然后可以用很多扩展的自定义方法。
  3. apply call (对象冒充)
    1. apply 应用某一对象的一个方法,用另一个对象替换当前对象。
    2. call    调用一个对象的一个方法,以另一个对象替换当前对象。
    3. 其它没有太多差别,除了传递参数的不同,下面提供一个例子:
      function f(args1, args2){
          alert(this.name)
          alert(arguments.length)
      }

      var o1 = {
          name : 'lisq'
      }
      f.apply(o1)

      var o2 = {
          name : 'lufang'
      }
      f.apply(o2, [1, 2])
      f.call(o2, "hello")

三个中要数arguments最容易理解了,但是我不理解为什么它不是一个数 组。this指向结合对象冒充,可以实现代码的灵活组装。

分享到:
评论

相关推荐

    解析 this.initialize.apply(this, arguments)

    标题 "解析 this.initialize.apply(this, arguments)" 涉及到的是JavaScript编程中的一个关键概念,尤其是在对象构造和类继承的情景下。`this` 关键字在JavaScript中扮演着核心角色,它指的是函数调用时的上下文,而...

    详解js中的apply与call的用法.docx

    在JavaScript中,`call`和`apply`是两种非常重要的函数调用方式,它们都用于改变函数执行时的上下文,即改变`this`的指向。这两个方法的主要区别在于它们处理参数的方式。 `call`方法允许你指定一个对象来替代原...

    JS中call/apply、arguments、undefined/null方法详解

    在JavaScript中,`call`和`apply`是两个非常重要的函数调用方式,它们允许我们改变函数执行时的上下文环境,即`this`的指向。同时,`arguments`对象则是一个特殊对象,它在每个函数内部都可以访问,用于获取函数调用...

    javascript利用apply和arguments复用方法

    JavaScript中的`apply`和`arguments`对象是两个非常重要的特性,它们在函数复用和处理动态参数时起着关键作用。本文将详细讲解这两个概念及其在复用方法中的应用。 `apply`是JavaScript中Function对象的一个方法,...

    理解JavaScript的caller callee call apply

    ### 理解JavaScript中的`caller`...综上所述,理解`caller`、`callee`、`call`、`apply`以及`arguments`对象在JavaScript编程中至关重要,它们不仅增强了函数的灵活性和复用性,还提供了深入分析和调试代码的强大工具。

    js中继承的几种用法总结(apply,call,prototype)

    在JavaScript中,实现对象继承主要有三种方式:原型链继承(prototype)、构造函数继承和call/apply继承。下面将分别详细介绍这三种继承方式的具体用法和实现原理。 1. 原型链继承(prototype) 原型链继承是...

    js中call与apply的用法小结.docx

    在JavaScript中,`call`和`apply`是两个非常重要的函数,它们都允许开发者改变函数执行时的上下文,即`this`的指向。这两个方法主要用于实现函数的绑定和继承,以及处理数组或类数组对象。 首先,我们来看`call`的...

    js中arguments,caller,callee,apply的用法小结.docx

    在JavaScript中,arguments、caller、callee和apply是四个与函数调用相关的特性,它们在编写高级和复杂的函数逻辑时非常有用。下面将详细介绍这些概念及其用法。 1. **arguments对象** arguments对象是一个特殊...

    javascript中apply和call方法的作用及区别说明

    一、call和apply的说明 1、call,apply都属于Function.prototype的一个方法,它是JavaScript...2、语法:foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments) == this.foo(arg1, arg2, arg3); 3、相同点:两

    Javascript - 全面理解 caller,callee,call,apply (转载)

    接下来,我们讨论`call`和`apply`,它们是JavaScript中函数调用的两种特殊方式。`call`和`apply`的主要区别在于传递参数的方式:`call`接受一个参数列表,而`apply`接受一个包含参数的数组。 `call`方法允许我们...

    详解js中call与apply关键字的作用

    在JavaScript中,call与apply是两个非常重要的关键字,它们的功能是改变函数执行时的上下文,也就是函数体内的this指向。通过call和apply可以调用某个函数,并且显式地指定该函数内部的this变量的值。 ### call和...

    【JavaScript源代码】JavaScript函数之call、apply以及bind方法案例详解.docx

    JavaScript中的call、apply和bind方法都是用来改变函数调用时的上下文(即this值)以及传递参数。它们之间的相同点在于,都能够指定函数执行时的this对象,并且都能接收参数。不同点在于它们的调用方式和执行时机。 ...

    Javascript 中的 call 和 apply使用介绍

    JavaScript中的`call`和`apply`是两种非常重要的函数调用方式,它们允许开发者改变函数执行的上下文,即函数内部的`this`值。这两个方法的主要区别在于传递参数的方式。 `call`方法的语法是`call(obj, arg1, arg2, ...

    详解JavaScript函数callee、call、apply的区别

    JavaScript中的`callee`、`call`和`apply`都是与函数有关的重要概念,它们提供了不同的方式来处理函数调用和上下文。以下是这三个特性的详细解释: **arguments.callee** `arguments.callee`是一个在函数内部可以...

    JavaScript中的apply和call函数详解

    在JavaScript中,apply和call是两个非常重要的函数,它们允许开发者在调用函数时指定函数体内this的值。了解apply和call的用法对于深入掌握JavaScript编程是非常有帮助的。首先,我们需要明白在JavaScript中,函数也...

    跟我学习javascript的call(),apply(),bind()与回调

    本文将详细解释JavaScript中call(), apply(), 和 bind() 方法的作用、语法以及使用场景,并且会探讨回调函数的使用,帮助理解这些概念在实际编程中的应用。 首先,我们来探讨call() 和 apply() 方法。这两个方法都...

    详解js中的apply与call的用法

    JavaScript中的`call`和`apply`都是函数对象的两个非常重要的方法,它们允许开发者在运行时改变函数执行的上下文,即改变`this`的指向。这两个方法的主要区别在于传递参数的方式。 `call`方法接收两个参数:第一个...

    javascript中apply/call和bind的使用

    apply()和call()在JavaScript中非常有用,尤其在需要改变函数内this指向时。比如,在类的方法中,this往往指向实例本身,但在某些情况下,比如事件处理函数中,this可能指向的是触发事件的元素。这时就可以使用call...

Global site tag (gtag.js) - Google Analytics