专栏首页布尔想起温习一下JS中的this apply call arguments

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 修改prototype使Event支持observe任何对象

    上次对js自定义事件做了一些介绍,这次修改prototype使得Event对象支持observe任何对象,代码如下: var Event = {     obs...

    用户1183026
  • javascript对象查看器

    <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb231...

    用户1183026
  • 用命令重启IIS 常重启IIS的朋友看过来

      网站莫名其妙出现问题(很多时候是我们发现不了它),于是重启服务(有时更痛快重启机器)。今天我们就IIS6.0来说一下你是怎么重启服务的吧。我想一开始都是靠图...

    用户1183026
  • 第174天:面向对象——公有属性、私有属性和静态属性

    半指温柔乐
  • DeepMind两篇新论文研究用神经网络做关系推理,探索人类智慧核心

    陈桦 编译自 DeepMind官方博客 作者 Adam Santoro, David Raposo, Nick Watters 量子位 报道 | 公众号 Qbi...

    量子位
  • 40道+JavaScript基础面试题(附答案)

    来源 | https://segmentfault.com/a/1190000015288700

    winty
  • 用IDEA详解Spring中的IoC和DI(挺透彻的,点进来看看吧)

    控制反转(IoC)是一个比较抽象的概念,它主要用来消减计算机程序的耦合问题,是Spring框架的核心。 依赖注入(DI)是IoC的另外一种说法,只是从不同的角度...

    泰斗贤若如
  • JavaScript---网络编程(5)-自定义对象Json、Dom模型概念讲解

    DOM 是 W3C(万维网联盟)的标准。 DOM 定义了访问 HTML 和 XML 文档的标准: “W3C 文档对象模型 (DOM) 是中立于平台和语言...

    谙忆
  • OC基础@property关键字及修饰符

    声明语法:@property(attr1,attr2,attr3,...)NSString* name;

    Light413
  • 聊一聊Javasript继承

      前前后后已经快写了2年左右javaScript,刚开始只是简单用于一些表单验证和操作dom节点,并没有深入的使用,随着渐渐的深入,开始不想去写重复的代码(懒...

    牛嗷嗷

扫码关注云+社区

领取腾讯云代金券