老师,我这个输出结果为啥不是 我是undefined

老师,我这个输出结果为啥不是 我是undefined

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数的上下文(this)</title>
</head>

<body>
    <script>
        var xiaoming = {
            name: '小明',
            age: 20,
            fn: function () {
                console.log('我是' + this.name + ',我' + this.age + '岁')
            }
        };
        xiaoming.fn();
        var fn = xiaoming.fn;
        fn();
        console.log(xiaoming.fn);
    </script>
</body>

</html>

https://img1.sycdn.imooc.com//climg/62f30ca8092c3f1719650876.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕星星 2022-08-10 09:53:49

同学你好,因为调用fn函数的对象不同,可以输出this看看

https://img1.sycdn.imooc.com//climg/62f30f1409c6047006880178.jpg

https://img1.sycdn.imooc.com//climg/62f30f060968615c08750213.jpg

直接调用this指向对象,也就是对象调用的,name和age都能获取到

https://img1.sycdn.imooc.com//climg/62f30f4a09fda88802920023.jpg

而赋值后再调用,this指向window,也就是window.fn()。在window对象中,name属性值为空字符串,age属性不存在,所以值为undefined

https://img1.sycdn.imooc.com//climg/62f30f650998a4dc03160052.jpg

自己再测试下,祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师