本文主要详细介绍了js中apply和call的简单用法,具有一定的参考价值。感兴趣的朋友可以参考一下。
可以直接看例子,也可以先看简介:
和call apply似乎动态地改变了这一点。当一个对象没有某个方法,而其他对象有,我们可以使用call或apply来操作其他对象的方法。
Call和apply属于Function.prototype的一个方法,由JavaScript引擎内部实现。因为属于Function.prototype,所以每个Function对象实例,也就是每个方法,都有call和apply的属性。既然它们是方法的属性,它们的使用当然是针对方法的。这两种方法很容易混淆,因为它们的功能相同,但使用方式不同。
从上面可以得出结论,方法使用call,apply,是为了改变调用该方法的this指针。
简单的例子:
call
函数A() {
this.getName=function (xx) {
返回xx;
}
}
函数B() {
}
var A=new A();
console.log( a.getName(我是A ));//我是一个
var B=new B();
console.log( a.getName.call(b,我是B ));//我是B
B函数中没有方法。A函数有一个getName()方法。a.getName()自然成立,但是如果B也使用getName()方法呢?然后用call(this, parameter )!
这句话你可以再理解一下——我们可以用call或者apply来调用其他对象方法来操作。调用和应用用于动态改变这一点。原来a.getName()的this指向A,call动态地将this指向B,就变成了b.getName()。
应用
Apply和call只是在参数的使用上有所不同。
函数A() {
this.sun=function (a,b) {
返回a b;
}
}
函数B() {
}
var A=new A();
console.log( a.sun(1,2));//3
var B=new B();
console.log( a.sun.call(b,2,2));//4
console.log( a.sun.apply(b,[3,3]));//6
call和apply一般使用情况
document.getElementsByTagName选择的dom节点是一个类似array的数组。它不能在数组下应用push、pop等方法。我们可以通过以下方式做到这一点:
var DOM nodes=array . prototype . slice . call(document . getelementsbytagname( * );
这样,domNodes可以应用Array下的所有方法。
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。