先看看在MDN打电话解释

调用()方法在使用指定的这个值和几个指定参数的前提下减少函数或方法的使用。

注:该方法的功能与应用()方法相似。只有一个区别。调用()方法接受一个多个参数的列表,而应用()方法接受包含多个参数的数组。

语法


fun.call(thisarg { { {,arg1,arg2,} } }…)




参数

thisarg

此值指定当乐趣的功能运行。请注意,指定这是不一定的功能时,真正的价值的价值,如果这个函数不是严格的模式,被指定为未定义的值将被自动定向到全局对象(浏览器窗口对象,和初始值)的原始值(数字,字符串,布尔值,该值)将指向的全自动包装的原始值的对象。

arg1,arg2,…

指定的参数列表。

MDN例一开始不太好理解,我把它放在这里,我看到调用Javascript自己感兴趣。

这里的thisarg解释是这个值的乐趣运行时,即指定,使用调用后,这个有趣点的thisarg看代码


var456;
函数f1(){
这个123;
}
函数F2(){
(这console.log。P);
}
F2(); / / 456 f2.call(F1()); / / 123 f2.apply(F1()); / / 123




第一个输出是被调用的全局变量。之后,由于调用和应用,F2中的这个值指向f1,所以输出变成123。事实上,F1使用F2输出P。

此时,f1()中的p被删除,三个456被输出,并确认当这是null或未定义时,它实际上指向全局变量。

至于原来的价值,它是包装对象指向它。在这里,因为我了解包装对象是暂时的,只输出原来的值类型而不是对象,我如何证明,如果一个认识它的朋友想和我讨论,谢谢你!

既然调用可以实现一个对象借用另一个对象,那么它可以继承吗看代码


函数f1(){
这个。父亲=父亲
}
函数F2(){
f1.call(本);
这个子子;
var测试=新F2();
console.log(测试。父亲); / /父亲




测试中没有父亲,因为F2()

f1.call(本);

这里的这一点是F2,这意味着F2借用了F1的方法,实际上继承了。

让我们来谈谈这里的参数。这里的参数传递给乐趣。看代码


函数f1(){
这个123;
}
函数F2(x){
(这console.log。P);
console.log(X);
}
f2.call(F1(),456); / / 123
456




第一个输出是123,因为F1中的p,接下来的456是传递给F2的参数,这很容易理解。

主要是注意调用中的参数之间的差异和应用。

调用是传入,应用是传入数组。


函数f1(){
这是测试调用;
}
函数F2(x,y,z){
(这console.log。P);
console.log(X);
console.log(Y);
console.log(Z);
}
函数F3(){
这是测试应用;
}
f2.call(F1(),4,5,6);
F2.call (F1 (), {4,5,6});
f2.apply(F3(){ },4,5,6);
f2.apply(F3),(4,5,6);




你可以在这里看到结果。



第一个测试调用是正确的输出。

第二部分是因为传入数组调用测试,所以数组的第一个输出和两个未定义的

第三段测试应用正确的输出

第四段由于参数格式的错误而直接出错。

这里的区别应该是显而易见的。