手机版

Javascript中调用和应用的学习笔记

时间:2021-09-10 来源:互联网 编辑:宝哥软件园 浏览:

先看MDN中call的解释

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

注意:此方法类似于apply()方法,只是调用()方法接受几个参数的列表,而apply()方法接受包含多个参数的数组。

语法

Fun.call (thisArg [,arg1 [,arg2 [,])参数thisarg

fun函数运行时指定的值。需要注意的是,指定的this值不一定是函数执行时的真实this值。如果函数处于非严格模式,指定的null和undefined这个值将自动指向全局对象(浏览器中的窗口对象),而这个的原始值(数字、字符串、布尔值)将指向原始值的自动包装对象。

arg1,arg2,

指定的参数列表。

MDN上的例子一开始并不容易理解。我会把它们贴在这里。如果我感兴趣,我可以自己去看call-Javascript。

这里thisArg被解释为fun运行时指定的值,这意味着fun中的这个指向thisArg?看看代码

var p=' 456函数f1(){ this . p=' 123 ';}函数F2(){ console . log(this . p);} F2();//456 F2 . call(f1());//123 F2 . apply(f1());//123第一个输出是被调用的全局变量。后来由于使用了call和apply,这在f2中指向f1,所以输出变成了123,这意味着f1借用了f2的方法来输出自己的p。

此时,在f1()中删除this.p将输出三个456,这证明当这个为null或未定义时,它实际上指向一个全局变量

至于指向原值的封装对象指的是它,既然我理解的所有封装对象都是临时的,测试时只输出原值的类型而不是对象,这里怎么证明如果有知道的朋友想和我讨论,谢谢!

既然调用可以从一个对象借用另一个对象,那么继承就不能实现吗?看看代码

函数f1(){ this .父亲='父亲' }函数F2(){ f1 . call(this);this.child=' child} var test=new F2();console.log(test .父亲);//父测试中没有父亲,因为f2()中没有父亲

f1.call(这个);

这里指向f2,也就是f2借用了f1的方法,实际上实现了继承

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

函数f1(){ this . p=' 123 ';}函数F2(x){ console . log(this . p);console . log(x);} f2.call(f1),(456);//123 //456首先因为f1中的P输出123,然后456是传递给f2的参数,很容易理解

主要注意调用和应用中参数的区别

调用是逐个传入的,而apply是传入的数组

函数f1(){ this . p=' test call ';}函数f2(x,y,z){ console . log(this . p);console . log(x);console . log(y);console . log(z);}函数F3(){ this . p=' test apply ';} f2.call(f1(),4,5,6);f2.call(f1(),[4,5,6]);f2.apply(f3(),[4,5,6]);f2.apply(f3),(4,5,6);你可以在这里看到结果

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

第二个测试调用在一个数组中传递,因此它首先输出一个数组,然后输出两个未定义的数组

第三部分测试apply的正确输出

第四段直接报告了由于参数格式错误而导致的错误

这里的区别应该很明显

版权声明:Javascript中调用和应用的学习笔记是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。