javascript - js apply/call传一个null参数不是window对象?

查看:164
本文介绍了javascript - js apply/call传一个null参数不是window对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

网上的资料说apply/call传null或者undefined,指向的window对象,
但是我 aa.show.call(null),为什么没有指向全局定义的show方法呢。
返回一个undefined?

解决方案

首先,我们来看看文档里关于apply是怎么说的:

注意我选中的部分,只有在"非严格模式"下,你说的nullundefined才会使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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆