发现一些文章对call和apply的存在误解,因为误解的解释方式比较容易被理解吧,当然也有批判的,但都只是说说怎么才是对的,没有具体分析误解为什么是误解今天让我们来仔细分析一下,为何不恰当function add(a, b) { alert(a + b);}function ...
发现一些文章对call和apply的存在误解,因为误解的解释方式比较容易被理解吧,当然也有批判的,但都只是说说怎么才是对的,没有具体分析误解为什么是误解今天让我们来仔细分析一下,为何不恰当
function add(a, b) { alert(a + b);}function sub(a, b) { alert(a - b);}add.call(sub, 3, 1); //4
恰当理解: 以上为从
网络上摘选的观点OK,首先,我们来看下什么是上下文:在
JavaScript中,你的代码将总是有着某种形式的上下文(代码在其内部工作的对象)。上下文是通过变量this工作的,变量this总是引用代码当前所在的那个对象。全局对象实际上是
window对象的属性,这意味着即使是在全局上下文里,this变量仍然引用一个对象。搞清了上下文,那么我们来看这样一个
函数function test() { var myValue = 1; this.value = 2;}
看到这里会不会有很奇怪的感觉了?真的是这样么?我们继续看,把add改一下
function add(a, b) { alert(this);}function sub(a, b) { function inner() { this.value = arguments[0] - arguments[1]; return this.value };}add.call(sub, 3, 1);
“说词1”完全不对,sub被替换成add后怎么this还会是sub?我们再来看一看,什么情况下会把函数代码体本身给输出来?
function test(a, b) { this.value = 1;}console.log('test:', test );console.log('test():', test() );console.log('new test():', new test() );
输出函数的引用,才会把函数代码体本身给输出基于这一结论,我们把本文最开始的代码这样改造一下,此时sub才参与工作了
function add(a, b) { alert(a + b); this(a, b) //此处相当于执行sub}function sub(a, b) { alert(a - b);}add.call(sub, 3, 1); //4 //2
再次根据“说词”派的解释,this.inner(a, b)交给了sub来执行,执行者是sub,那么this.inner()的caller必定指向sub输出的结果是add
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:例证关于js中call和apply的误解
关键词:JS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。