JS:call()和apply的区别

每个函数都包含两个非继承而来的方法:call()和apply();

call()方法:参数,第一个是作用域中调用函数(this),其余是参数直接传给函数 扩大作用域,传递参数时,参数必须逐个列出。

window.color = "red";
var o = {color:"blue"};
function sayColor () {
alert(this.color);

}
 sayColor(); //red
 sayColor.call(this);//red
 sayColor.call(window); //red
 sayColor.call(o);//blue

function sum(num1, num2){
return num1 + num2
}

function callSum(num1, num2){
return sum.call(this,num1,num2);
}
alert(callSum(10,10)); //20

applay()方法也接受两个参数:

          一个是在其中运行函数的作用域(this);

          另一个是参数数组(可以是Array的实例,如[num1,num2]),也可以是arguments对象;

function callSum1(num1,num2){
   return sum.apply(this,arguments);
 }

function callSum2(num1, num2){
   return sum.apply(this,[num1,num2]);
 }
 alert(callSum1(10,10));
 alert(callSum2(10,10));

applay()和call()两者的区别:

applay()和call()相同点:用途都是在特性的作用域中调用函数(设置函数体内this队形的值)
两者的不同点:接受的第二个参数不同,call()接受的参数必须逐个列举出来,而applay(),可以是arguments对象也可是是Array数组实例。

时间: 2024-11-04 10:51:17

JS:call()和apply的区别的相关文章

js中的call,apply,bind区别

在JavaScript中,call.apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向. call.apply.bind方法的共同点和区别:apply . call .bind 三者都是用来改变函数的this对象的指向的:apply . call .bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文(函数的每次调用都会拥有一个特殊值--本次调用的上下文(context)--这就是this关键字的值.):apply . ca

call和apply的区别

call和apply的区别: 它们各自的定义:   apply:应用某一对象的一个方法,用另一个对象替换当前对象.例如:B.apply(A, arguments);即A对象应用B对象的方法. call:调用一个对象的一个方法,以另一个对象替换当前对象.例如:B.call(A, args1,args2);即A对象调用B对象的方法. 它们的共同之处: 都"可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象". 它们的不同之处: app

js 的 call apply bind 方法

js的call apply bind 方法都很常见,目的都是为了改变某个方法的执行环境(context) call call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) thisObj可选项.将被用作当前对象的对象.arg1, arg2, argN ..可选项.将被传递方法参数序列. 如果没设置严格模式 “use strict” 当thisObj 不存在或 为 undefined 或为 null 或为 this 时,则隐式地指向 全局对象(在浏览器中即为 wi

js call 以及apply

用实例来讲:一半什么场合用到bind.call.apply呢? [一个对象 A]的方法被[另一个对象 B][引用]的时候(请注意 引用 的意思,区分调用 ):[对象A]的方法内的this作用域就不指向[对象A]了,这个时候你再用this.XX项调用[对象A]的某个属性就会发生错误. 举个例子吧: var aHello = { name : "hello", showName : function(){ console.log(this.name); //console.log(this

js中声明函数的区别

在JS中有两种定义函数的方式, 1是var aaa=function(){...} 2是function aaa(){...} var 方式定义的函数,不能先调用函数,后声明,只能先声明函数,然后调用. function方式定义函数可以先调用,后声明.请看代码: var声明时,只有变量声明提前了,变量的初始化代码仍在原位置.然而,使用函数声明的话,函数名称和函数体都会提前.两种声明得到的函数都不可删除 //aaa();这样调用就会出错                var aaa = funct

jQuery的ready与js的load事件的区别

摘自:http://www.cnblogs.com/see7di/archive/2011/07/15/2239677.html 为了理解这两个事件的异同,读者应该先了解HTML文档加载的顺序. DOM文档加载是按顺序执行的,这与浏览器的渲染方式有关系.一般浏览器渲染操作的顺序大致按如下几个步骤来完成.(1) 解析HTML结构.(2) 加载外部脚本和样式表文件.(3) 解析并执行脚本代码.(4) 构造HTML DOM模型.(5) 加载图片等外部文件.(6) 页面加载完毕. 具体说明如下.1. 执

js call 和apply

ECMAScript3  给Function原型上定义了两个方法,他们是Function.prototype.call和Function.prototype.apply. call和apply的区别 1 var func =function(a,b,c){ 2 alert([a,b,c]); 3 }; 4 func.apply(null,[1,2,3]);//apply 5 6 7 var func =function(a,b,c){ 8 alert([a,b,c]); 9 }; 10 func

javascript 中的call 和apply的区别

一直对call 和apply很模糊,今天终于搞懂了,分享出来给大家. apply call bind方法 var ZS = { name:"张三", sex : "男", age : "25岁", say :function(){ console.log(this.name+","+this.sex+",今年"+this.age) } } var LS = { name:"李四", se

bind、call、apply的区别与实现

1.简单说一下bind.call.apply的区别 三者都是用于改变函数体内this的指向,但是bind与apply和call的最大的区别是:bind不会立即调用,而是返回一个新函数,称为绑定函数,其内的this指向为创建它时传入bind的第一个参数,而传入bind的第二个及以后的参数作为原函数的参数来调用原函数. var obj = {}; function test() { console.log(this === obj); } test(); //false var testObj =