BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #39242同步于 2016/11/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

[问题]js高程中函数的apply

qqpp3939
2016/11/17镜像同步17 回复
1)如果将apply的第一个参数设为this的话,可以吗?这时this是指向谁,Math还是window? 2)如果将apply的第一个参数设为null的话,作用域为空,怎么找到values? 3)将max的作用域设为Math,values是在window的作用域中定义的,在Math中找不到,于是向上搜索,最后在window中找到values,过程是这样的吗? ***************************************************************************************************** 图中的最后一个的apply打错了 2中的this不就是指Lib吗?为什么1就没报错2就报错了?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
anthozoan77机器人#1 · 2016/11/17
我不确定这样测试是否正确。 Math.test_this = function(){ console.log(this); } //test Math.test_this.apply(this); //window Math.test_this.apply(null); //window Math.test_this.apply(Math); //Math 当然也得看谁调用了 Math.test_this。 var obj = { test: Math.test_this } obj.test(); // obj
qqpp3939机器人#2 · 2016/11/17
【 在 anthozoan77 的大作中提到: 】 : 我不确定这样测试是否正确。 : Math.test_this = function(){ : console.log(this); : ................... 既然 var obj = { test: Math.test_this } obj.test(); // obj 那么 var Lib={ doB:function(){} } Lib.doB.apply(this,[]);//this就是Lib啊 就和Lib.doB.apply(Lib,[]);一样,为什么会报错啊? 还有Math.test_this.apply(this); //window 调用test_this的是Math啊,为什么返回的是window啊?
anthozoan77机器人#3 · 2016/11/17
Lib.doB.apply(this,[]); 这里的 this 不是 Lib, 而是 window。 而 window 没有 doA 方法,所以报错。 【 在 qqpp3939 的大作中提到: 】 : : 既然 : var obj = { : ...................
qqpp3939机器人#4 · 2016/11/17
qqpp3939机器人#5 · 2016/11/17
【 在 anthozoan77 的大作中提到: 】 : Lib.doB.apply(this,[]); : 这里的 this 不是 Lib, 而是 window。 : 而 window 没有 doA 方法,所以报错。 var obj = { test: Math.test_this } obj.test(); // obj 为什么这里是的this是obj? var Lib={ doB:function(){} } Lib.doB.apply(this,[]); 而这里的this却是window,这个this不是当前调用doB这个方法的对象吗?这里是Lib点出来调用的啊
anthozoan77机器人#6 · 2016/11/17
你直接在 console 中打印 this 的值,看是多少。 而 Lib.doB.apply(this,[]); 中传入的就是这个 this 的值。、 【 在 qqpp3939 的大作中提到: 】 : var obj = { : test: Math.test_this : } : ...................
qqpp3939机器人#7 · 2016/11/17
【 在 anthozoan77 的大作中提到: 】 : 你直接在 console 中打印 this 的值,看是多少。 : 而 Lib.doB.apply(this,[]); 中传入的就是这个 this 的值。、 : 用console打印出来的话,还是不知道为什么啊,this的值能直接看代码判断出来吗
anthozoan77机器人#8 · 2016/11/17
看文档吧。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this this 除了bind外应该都是执行期间确定的。 【 在 qqpp3939 的大作中提到: 】 : 用console打印出来的话,还是不知道为什么啊,this的值能直接看代码判断出来吗
qqpp3939机器人#9 · 2016/11/18
【 在 anthozoan77 的大作中提到: 】 : 看文档吧。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this : this 除了bind外应该都是执行期间确定的。 为什么Math.test_this();的this就是Math,Math.test_this.apply(this);的this就是window? 这个也一样,为什么加了apply后this就变成了window?