JS经典面试题04-原型链Foo.getName

在这里插入图片描述

1.1-答案揭晓

在这里插入图片描述

1.2-原理解析

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>

        /*总结:本题目覆盖知识点 
        1. 变量不使用var声明,默认是全局变量。 没有作用域限制
        2. this指向
        3. 静态成员 与 实例成员
        4. 原型
        5. 预解析
        */
       
        /* 题干 */

        //1.声明全局函数Foo
        function Foo() {
            //声明全局变量getName : 本质给window添加getName方法
            getName = function () {
                console.log(1);
            };
            /* 
            没有使用new : this指向window
            使用new : this指向new创建的空对象(实例化对象)
            */
            return this;
        }

        //2.给Foo添加静态成员 : getName
        Foo.getName = function () {
            console.log(2);
        }
        //3.给Foo添加原型方法getName
        Foo.prototype.getName = function () {
            console.log(3);
        }
        //4.声明全局函数getName
        var getName = function () {
            console.log(4);
        };
        //5.声明全局函数getName (被var覆盖)
        function getName() {
            console.log(5);
        }

        /* 题目 */

        //1.调用Foo函数对象自己的方法
        Foo.getName();//2
        //2.调用全局函数
        getName();//4
        //3.调用Foo() 返回window    继续调用window对象的getName方法
        Foo().getName();//1
        //4.调用全局函数 getName
        getName();//1
        //5. new Foo.getName : 这里并没有调用Foo,所以其实是调用Foo函数对象自己的getName
        //前面这个new是吓唬你的
        new Foo.getName()//2
        //6. new Foo() :返回实例化对象  调用getName访问原型中的方法 
        new Foo().getName();//3
        //7. 多出来的new是吓唬你的,原理与6一致
        // 相当于  new   (new Foo.getName())  与6中的this指向有区别
        new new Foo().getName();//3   
    </script>
</body>

</html>
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值