关注
function Foo() {
getName = function () { console.log (1); };
return this;
}
Foo.getName = function () { console.log (2);};
Foo.prototype.getName = function () { console.log (3);};
var getName = function () { console.log (4);};
function getName() { console.log (5);}
//以下输出值为多少?
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();
foo.getName(); //2 访问Foo函数上存储的静态属性
getName(); // 4 直接调用getName函数: 由于 js 会对变量和函数声明进行变量提升,
// 所以,虽然 function getName 在后面,但是其实相当于在最前面。 被之后的var getName 重新覆盖了
foo().getName(); // 1 先执行了Foo函数,直接调用 Foo其中this是 widnow,而且Foo()中的getName没有加var,所以是全局变量。也就是给 window.getName重新赋值
getName(); // 1 直接调用getName函数,相当于 window.getName() 因为这个变量已经被Foo函数执行时修改了,遂结果与第三问相同,为1
new foo.getName(); // 2 优先级:'.'点优先级>'new' 所以先执行foo.getName(‘2’),再新建一个实例对象
new foo().getName(); // 3 new foo()的优先级 > foo().getName() —— 先执行 new Foo(), 结果产生一个新的实例对象,并且继承了Foo()这个构造函数中的getName方法,所以再执行方式3函数块
// Foo()执行返回this,此时this指向new出来的新实例对象,
// 实例对象从本身找不到getName属性,顺着原型链找到第6行的getName,打印3
new new foo().getName(); // 3 先执行new foo()得到一个实例,然后再new这个实例的getName方法,这个时候会执行这个方法,所以输出3
// 以实例的getName方法为构造函数new实例,执行构造函数,打印3
// 执行第6行
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
转发
牛客热帖
正在热议
# 和牛牛一起刷题打卡 #
9243次浏览 809人参与
# 机械制造薪资爆料 #
347634次浏览 4098人参与
# 牛客帮帮团来啦!有问必答 #
1051785次浏览 15956人参与
# 通信硬件薪资爆料 #
249920次浏览 2356人参与
# 你收到了团子的OC了吗 #
524579次浏览 6229人参与
# 毕业租房也有小确幸 #
38067次浏览 3124人参与
# 你怎么评价今年的春招? #
9034次浏览 158人参与
# 晒一晒我的offer #
3721087次浏览 57490人参与
# 来选选带哪个offer回家过年 #
191374次浏览 1835人参与
# 实习生应该准时下班吗 #
87898次浏览 646人参与
# 腾讯工作体验 #
150965次浏览 1475人参与
# 春招你拿到offer了吗 #
397354次浏览 5739人参与
# 我想象的工作vs实际工作 #
104015次浏览 1676人参与
# 百度工作体验 #
28489次浏览 286人参与
# 如何写一份好简历 #
308730次浏览 4405人参与
# 担心入职之后被发现很菜怎么办 #
36999次浏览 311人参与
# 0offer互助地 #
56545次浏览 602人参与
# 浅聊一下我实习的辛苦费 #
98001次浏览 984人参与
# 运营面经 #
22735次浏览 508人参与
# 你的简历改到第几版了 #
327296次浏览 4945人参与