javascript - js apply/call传一个null参数不是window对象?
本文介绍了javascript - js apply/call传一个null参数不是window对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
网上的资料说apply/call传null或者undefined,指向的window对象,
但是我 aa.show.call(null),为什么没有指向全局定义的show方法呢。
返回一个undefined?
解决方案
首先,我们来看看文档里关于apply
是怎么说的:
注意我选中的部分,只有在"非严格模式"下,你说的
null
,undefined
才会使this
指向全局对象(如果在浏览器里就是window
)
这是你提问的第一个问题!
第二个问题,你调用的就是aa.show.call
,都这么明确指定了,她还怎么指向全局定义的show方法?这不科学啊,我看你是没搞清楚那个全局到底应该作用在哪里。
举个栗子:
//全局定义变量test
var test = 'fuck';
//再定义一个全局的对象obj
var obj = {
test: 'Hello',
say: function(){
console.log(this.test);
}
};
//现在我们直接调用say方法
obj.say();//这里的this你猜是谁?答案是:obj本身,所以这里打印出来的是Hello
//再来通过call方法修改this
obj.say.call(null);//这里的this因为被null替换成全局对象了,那打印出来的当然是window.test,就应该是fuck
这么说能理解了么?
这篇关于javascript - js apply/call传一个null参数不是window对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文