为了账号安全,请及时绑定邮箱和手机立即绑定

一道前端面试题

一道前端面试题

江户川乱折腾 2018-08-02 21:14:18
    function Person(){        getAge = function(){            console.log(10);        }        return this;    }    Person.getAge = function(){        console.log(20);    }    Person.prototype.getAge = function(){        console.log(30);    }    var getAge = function(){        console.log(40);    }    function getAge(){        console.log(50);    }    Person.getAge(); // 20 Person的静态方法    getAge(); // 40 函数的预处理 函数表达式 覆盖了 函数声明    Person().getAge();    getAge();    new Person.getAge();    new Person().getAge();    以下是不太懂的地方,不知道自己的理解是否正确。    Person().getAge(); // 10  普通的函数调用?     getAge(); // 不懂为什么输出10     new Person.getAge(); // 也是Person的静态方法调用?     new Person().getAge(); // 30     // new Person()返回一个Person实例, 沿着原型链寻找, 打印30?     // Person里本身就有getAge()方法,为什么还会去原型链上寻找?
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

Person().getAge(); // 10  普通的函数调用?

(对就是普通的函数调用)


getAge(); // 不懂为什么输出10

(因为上面的函数调用,让全局变量getAge指针发生了变化,指向了新函数)


new Person.getAge(); // 也是Person的静态方法调用?

(这个是构造函数调用,创建了一个 Person.getAge 的实例)


new Person().getAge(); // 30

// new Person()返回一个Person实例, 沿着原型链寻找, 打印30?

// Person里本身就有getAge()方法,为什么还会去原型链上寻找?

(这个是构造函数调用,创建了一个 Person 的实例,而 Person 上面是没有getAge这个方法的,

所以从原型链上找。Person中的那个getAge不是它的属性,那是一个全局变量,可以说是window的属性。

你可以试一下window.getAge();//10)


查看完整回答
反对 回复 2018-08-05
  • 2 回答
  • 0 关注
  • 929 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信