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

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

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 网页增加动态功能。

    728 引用 • 1273 回帖 • 1 关注
  • Node.js

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

    139 引用 • 269 回帖 • 29 关注

相关帖子

欢迎来到这里!

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

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