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)
添加回答
举报
0/150
提交
取消