JavaScript `apply` 与 `call` 的异同点

本贴最后更新于 2626 天前,其中的信息可能已经东海扬尘

1.apply()方法 接收两个参数

  • 一个是函数运行的作用域(this)
  • 另一个是参数数组。

语法:apply([thisObj [,argArray] ]);

**说明:**如果 argArray 不是一个有效 数组 或不是 arguments 对象,那么将导致一个 TypeError,如果没有提供 argArraythisObj 任何一个参数,那么 Global 对象将用作 thisObj

2.call()方法 接收多个参数

  • 第一个参数和 apply()方法的一样
  • 后继传递给函数的多个参数必须列举出来。

语法:call([thisObject[,arg1 [,arg2 [,...,argn]]]]);

说明: call 方法可以用来代替另一个对象调用一个方法,call 方法可以将一个函数的对象上下文从初始的上下文改变为 thisObj 指定的新对象,如果没有提供 thisObj 参数,那么 Global 对象被用于 thisObj

eg.1

window.color = 'red'; document.color = 'yellow'; var s1 = { color: 'blue' }; function changeColor() { console.log(this.color); } //call() changeColor.call(); //red (默认传递参数) changeColor.call(window); //red changeColor.call(document); //yellow changeColor.call(this); //red changeColor.call(s1); //blue //apply() changeColor.apply(); //red (默认传递参数) changeColor.apply(window); //red changeColor.apply(document); //yellow changeColor.apply(this); //red changeColor.apply(s1); //blue

eg.2

function add(c, d) { return this.a + this.b + c + d; } var s = { a: 1, b: 2 }; console.log(add.call(s, 3, 4)); // 1+2+3+4 = 10 console.log(add.apply(s, [5, 6])); // 1+2+5+6 = 14

eg.3

window.firstName = "Cynthia"; window.lastName = "_xie"; var myObject = { firstName: 'my', lastName: 'Object' }; function getName() { console.log(this.firstName + this.lastName); } function getMessage(sex, age) { console.log(this.firstName + this.lastName + " 性别: " + sex + " age: " + age); } getName.call(window); //Cynthia_xie getName.call(myObject); //myObject getName.apply(window); //Cynthia_xie getName.apply(myObject); //myObject getMessage.call(window, "女", 21); //Cynthia_xie 性别: 女 age: 21 getMessage.apply(window, ["女", 21]); //Cynthia_xie 性别: 女 age: 21 getMessage.call(myObject, "未知", 22); //myObject 性别: 未知 age: 22 getMessage.apply(myObject, ["未知", 22]); //myObject 性别: 未知 age: 22

原文:http://blog.csdn.net/ganyingxie123456/article/details/70855586

  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    730 引用 • 1280 回帖
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...