`

想起温习一下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指向结合对象冒充,可以实现代码的灵活组装。

分享到:
评论

相关推荐

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

    主要介绍了JS中call/apply、arguments、undefined/null方法详解的相关资料,需要的朋友可以参考下

    javascript利用apply和arguments复用方法

    主要介绍了javascript利用apply和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、相同点:两

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

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

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

    NULL 博文链接:https://fkshl.iteye.com/blog/1178391

    js中apply()和call()的区别与用法实例分析

    本文实例讲述了js中apply()和call()的区别与用法。分享给大家供大家参考,具体如下: 每个函数都包括两个非继承而来的方法:apply()和call()。两者用途都是在特定的作用域中调用函数,等于重新设置了函数体内this...

    理解Javascript函数形式参数与arguments

    理解Javascript函数形式参数与arguments

    Javascript 中的 call 和 apply使用介绍

    apply第一个参数传对象,参数可以是数组或者arguments 对象。 这两个方法通常被用来类的继承和回调函数: 作用一、类的继承: 先来看这个例子: 代码如下: function Person(name,age){ this.name = name; this.age=...

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

    JavaScript 中通过call或者apply用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。简单的说就是改变函数执行的上下文,这是最基本的用法。两个方法基本区别...

    javascript中call apply 的应用场景

    在一些jQuery插件中经常看到类似 callback.call(xxx,xxx) 虽然看到书上有介绍 说call和apply函数可以改变作用域,但还是无法非常透彻的理解改变作用域主要是为了解决什么问题,有没有替代方案,或者 这2个函数主要...

    全面了解构造函数继承关键apply call

    主要我是要解决一下几个问题:  1. apply和call的区别在哪里  2. apply的其他巧妙用法(一般在什么情况下可以使用apply) 我首先从网上查到关于apply和call的定义,然后用示例来解释这两个方法的意思和如何去用. ...

    JS:arguments

    JS:arguments

    JavaScript中arguments和this对象用法分析

    本文实例讲述了JavaScript中arguments和this对象用法。分享给大家供大家参考,具体如下: 在函数内部有两个特殊的对象 : arguments和this。 1、arguments对象 js函数不介意定义多少参数,也不在乎传递进来多少参数,...

    浅谈javascript中的Function和Arguments

    javascript的Function 属性: 1、Arguments对象 2、caller  对调用单前函数的Function的引用,如果是顶层代码调用,  则返回null(firefox返回undefined)。  注:只有在代码执行时才有意义 3、length  声明...

    Array.prototype.slice.apply的使用方法

     } arguments在JavaScript语法中是函数特有的一个对象属性(Arguments对象),用来引用调用该函数时传递的实际参数。这个对象很象数组,拥有length属性且使用下标的形式来获取其元素,但它又并非真正的Array对象。更...

    【JavaScript源代码】JavaScript中arguments的使用方法详解.docx

    JavaScript中arguments的使用方法详解  js这是一门弱语言,不像其他语言如c,java等,有严格的规范, 所以现在也流传着一种说法,js本来就不是一种语言; 说回arguments,它是js中函数内置的一个对象,而执行函数...

    深入学习js函数的隐式参数 arguments 和 this

    主要介绍了 深入学习js函数的隐式参数 arguments 和 this,arguments是一个类数组结构,它保存了调用时传递给函数的所有实参;this是函数执行时的上下文对象, 这个对象有些让人感到困惑的行为。 下面分别对他们进行...

    JavaScript中apply方法的应用技巧小结

    前言 最近在看JavaScript设计模式,其中有一些巧妙的函数。... return this.apply(ctx, arguments) } 二、apply实现bind Function.prototype.bind = function () { var ctx = [].shift.apply(argume

Global site tag (gtag.js) - Google Analytics