返回信息流1)如果将apply的第一个参数设为this的话,可以吗?这时this是指向谁,Math还是window?
2)如果将apply的第一个参数设为null的话,作用域为空,怎么找到values?
3)将max的作用域设为Math,values是在window的作用域中定义的,在Math中找不到,于是向上搜索,最后在window中找到values,过程是这样的吗?
*****************************************************************************************************
图中的最后一个的apply打错了
2中的this不就是指Lib吗?为什么1就没报错2就报错了?
这是一条镜像帖。来源:北邮人论坛 / www-technology / #39242同步于 2016/11/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
[问题]js高程中函数的apply
qqpp3939
2016/11/17镜像同步17 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
我不确定这样测试是否正确。
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
【 在 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啊?
Lib.doB.apply(this,[]);
这里的 this 不是 Lib, 而是 window。
而 window 没有 doA 方法,所以报错。
【 在 qqpp3939 的大作中提到: 】
:
: 既然
: var obj = {
: ...................
【 在 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点出来调用的啊
你直接在 console 中打印 this 的值,看是多少。
而 Lib.doB.apply(this,[]); 中传入的就是这个 this 的值。、
【 在 qqpp3939 的大作中提到: 】
: var obj = {
: test: Math.test_this
: }
: ...................
【 在 anthozoan77 的大作中提到: 】
: 你直接在 console 中打印 this 的值,看是多少。
: 而 Lib.doB.apply(this,[]); 中传入的就是这个 this 的值。、
:
用console打印出来的话,还是不知道为什么啊,this的值能直接看代码判断出来吗
看文档吧。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
this 除了bind外应该都是执行期间确定的。
【 在 qqpp3939 的大作中提到: 】
: 用console打印出来的话,还是不知道为什么啊,this的值能直接看代码判断出来吗
【 在 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?