jsapply和call的作用和区别,js apply和call的区别

jsapply和call的作用和区别,js apply和call的区别,详解js中的apply与call的用法

在ECAMScript3中,为函数的原型定义了两种方法。分别是Function.prototype.call和Function.prototype.apply本文详细介绍了apply和call的用法,有需要可以参考一下。

前言

call 和 apply

的存在是为了改变

context

,即函数运行时的上下文。换句话说,就是为了

改变函数体内部 this 的指向

call 和 apply

的功能完全一样,只是接受参数的方式不同。

方法定义

apply

Function.apply(obj,args)方法可以接收两个参数:

obj:

此对象将替换函数类中的此对象。

args:

这是数组或类数组。apply方法将该集合中的元素作为参数传递给被调用的函数。

call

call方法

的第一个参数与

apply方法

相同,只是第二个参数是一个参数表。

在非严格模式中,当我们的第一个参数被传递为null或未定义时,函数体中的this将指向默认的宿主对象,而在浏览器中,它将是window。

var test=function(){

console . log(this===window);

}

test.apply(空);//真

test.call(未定义);//真

用法

"劫持"别人的方法

此时,

foo

中的

logName

方法将被bar引用,

this

指向

bar

var foo={

姓名:明明,

日志名:函数(){

console . log(this . name);

}

}

var bar={

姓名:“王晓”

};

foo . logname . call(bar);//王晓

实现继承

功能动物(名称){

this.name=name

this.showName=function(){

console . log(this . name);

}

}

功能类别(名称){

Animal.call(这个,名字);

}

var cat=新猫(黑猫);

cat . showname();//黑猫

在实际开发中,我们经常会遇到这一点被不经意改变的场景。

有一个本地的

fun

方法。当

fun

作为普通函数调用时,

fun

内部的

this

指向

window

,但我们往往希望它指向这个

#test

节点。请参见以下代码:

window.id= window

document . query selector(# test)。onclick=function(){

console . log(this . id);//测试

var fun=function(){

console . log(this . id);

}

fun();//窗口

}

我们使用

call,apply

就可以轻松解决这个问题。

window.id= window

document . query selector(# test)。onclick=function(){

console . log(this . id);//测试

var fun=function(){

console . log(this . id);

}

fun.call(这个);//测试

}

当然,你也可以这样做,但是在

ECMAScript 5

strict

模式中,本例中的this已经被规定为

undefined:

,而不是指向全局对象。

window.id= window

document . query selector(# test)。onclick=function(){

var that=this

console . log(this . id);//测试

var fun=function(){

console . log(that . id);

}

fun();//测试

}

函数func(){

使用严格

警戒(这个);//输出:未定义

}

func();

其他用法

类数组

这里,满足以下条件的对象称为类数组。

1.具有长度属性。

2.按索引存储数据。

3.无数组的push、pop等方法

常见的类数组是

arguments,NodeList!

(函数(){

array . prototype . push . call(arguments,4);

console.log(参数);//[1, 2, 3, 4]

})(1,2,3)

所以把一个4推进

arguments

Array.prototype.push页面可以实现两个数的组合。

同样,push方法不提供push的数组,但是提供了

push(param1,param,…paramN)

,所以也可以通过应用来安装和更改这个数组,即:

var arr1=新数组( 1 , 2 , 3 );

var arr2=新数组( 4 , 5 , 6 );

array . prototype . push . apply(arr 1,arr 2);

console . log(arr 1);//[1, 2, 3, 4, 5, 6]

也可以这样理解,

arr1

调用

push

方法,参数是

apply

组装的参数表集合。

再比如我想求类数组中的最大值

(函数(){

var maxNum=Math.max.apply(null,参数);

console . log(maxNum);//56

})(34,2,56);

判断类型

console . log(object . prototype . tostring . call(123))//[对象编号]

console . log(object . prototype . tostring . call( 123 )//[对象字符串]

console . log(object . prototype . tostring . call(Undefined))//[对象未定义]

控制台。日志(对象。原型。托斯特林。call(true))//[object布尔值]

控制台。日志(对象。原型。托斯特林。调用({ })//[Object Object]

控制台。日志(对象。原型。托斯特林。调用([])//[对象数组]

控制台。日志(对象。原型。托斯特林。call(Function(){ })//[对象函数]

以上就是应用与呼叫的用法总结的全部内容,欢迎大家积极留言参加讨论,也希望本文对大家学习Java语言(一种计算机语言,尤用于创建网站)描述语言有所帮助。

jsapply和call的作用和区别,js apply和call的区别