JS中apply()与call()的含义与区别

JavaScript中,apply()与call()的含义一样,均为改变调用函数中的this指向。
其中apply()与call()的第一个参数表示所要指向的对象,若调用函数无参数可不写,则默认为window。
第一个参数后的参数表示调用函数的参数,其中apply()第一个参数后面的参数为一个数组,call()第一个参数后面为0或多个参数。

例:

 1 window.x = 100;
 2
 3
 4 var obj = {};
 5 obj.x = 1;
 6 obj.test = function(a) {
 7     alert(this.x + 20 + a);
 8 }
 9
10
11 var abc = {};
12 abc.x = 2;
13 abc.test = function() {
14     alert(this.x + 30 + a);
15 }
16
17
18 obj.test(10);                 // 结果为31,this指向obj
19 obj.test.call(window, 10);         // 结果为130,this指向window
20 obj.test.call(abc, 10);         // 结果为32,this指向abc
21
22
23 obj.test.apply(window, [10]);    // 结果为130,this指向window
24 obj.test.apply(abc, [10])        // 结果为32,this指向abc

JS中apply()与call()的含义与区别,布布扣,bubuko.com

时间: 2024-10-08 22:21:11

JS中apply()与call()的含义与区别的相关文章

转:js中javascript:void(0) 真正含义

from:http://www.jb51.net/article/71532.htm 在Javascript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值. 我想使用过ajax的都常见这样的代码: 代码如下: <a href="javascript:doTest2();void(0);">here</a> 但这儿的void(0)究竟是何含义呢? void 操作符用法格式如下: 1. javascript:void (expression) 2.

js中 javascript:void(0)的含义

void(0)用于执行某些处理,但是不整体刷新页面的情况下, javascript:void(0)表示不做任何动作.如: <a href="javascript:void(0);" onclick="alert('ok');"></a> 这里表示这个链接不做跳转动作,执行onClick事件. 我想使用过ajax的都常见这样的代码: <a href="javascript:doTest2();void(0);">

javascript中apply、call和bind的区别,容量理解,值得转!

a)  javascript中apply.call和bind的区别:http://www.cnblogs.com/cosiray/p/4512969.html b)  深入浅出 妙用Javascript中apply.call.bind   http://www.admin10000.com/document/6711.html ====================================================== 在JS中,这三者都是用来改变函数的this对象的指向的,他们

关于js中for in和foreach in的区别

js 中for in 和foreach in的区别 两个的作用都用来遍历对象,但为什么有了for in语句了还要foreach in语句呢,后来看了下foreach in开发的文档,foreach in是作为E4X标准的一部分在javascript 1.6中发布的,而且E4X不是ECMAScript标准的一部分. foreach…in语句已被废弃,E4X中的大部分特性已被删除,但考虑到向后兼容,foreach…in只会被禁用而不会被删除,可以使用ES6中新的for…of语句来代替. var 小青

js中对象的浅拷贝和深拷贝的区别

js中对象的浅拷贝和深拷贝的区别 浅度拷贝:复制一层对象的属性,并不包括对象里面的为引用类型的数据,当改变拷贝的对象里面的引用类型时,源对象也会改变. 深度拷贝:重新开辟一个内存空间,需要递归拷贝对象里的引用,直到子属性都为基本类型.两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性. 数据的类型: 一般数据(值传递):字符,数值,布尔,undefined 拷贝(复制)时,传递的是值,修改新数据,不会影响老数据 复杂数据(引用传递):对象 拷贝(复制)时,传递的是内存地址的

详解JS中Number()、parseInt()和parseFloat()的区别

转载:详解JS中Number().parseInt()和parseFloat()的区别 三者的作用: Number(): 可以用于任何数据类型转换成数值: parseInt().parseFloat(): 专门用于把字符串转换成数值: 一.Number( ): (1)如果是Boolean值,true和false将分别转换为1和0. (2)如果是数字值,只是简单的传入和返回. (3)如果是null值,返回0. (4)如果是undefined,返回NaN. (5)如果是字符串,遵循下列规则: 如果字

Js 中apply 与 call

最近看JS 总是遇到 对象的替换,不是很了解 JS中call 与apply的用法,在这里 轻轻瞄一下,只是自己理解下其用法: apply  定义:应用某一对象的一个方法,用另一个对象替换当前对象. apply([thisObj[,argArray]]) call   定义:调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 从上面可以看出 其实他们的用法几乎一样,唯一的区别就是,调用时,apply传入的参数

javascript中apply、call和bind的区别

在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢.在说区别之前还是先总结一下三者的相似之处:1.都是用来改变函数的this对象的指向的.2.第一个参数都是this要指向的对象.3.都可以利用后续参数传参.那么他们的区别在哪里的,先看一个例子. var xw = { name : "小王", gender : "男", age : 24, say : function() { alert(this.name + " , "

js中数组遍历for与for in区别(强烈建议不要使用for in遍历数组)

转自: http://www.cnblogs.com/javaee6/p/4142270.html?utm_source=tuicool&utm_medium=referral js中遍历数组的有两种方式 1 2 3 4 5 6 7 8 9 var array=['a'] //标准的for循环 for(var i=1;i<array.length;i++){     alert(array[i]) } //foreach循环 for(var i in array){     alert(ar