关注
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行
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 笔试 #
2034091次浏览 23178人参与
# 互联网回暖,腾讯要招5000人! #
6176次浏览 90人参与
# 腾讯音乐26届实习 #
150009次浏览 898人参与
# 牛友故事会 #
170456次浏览 2874人参与
# 技术岗笔试题求解 #
25611次浏览 386人参与
# 金融银行面经 #
60698次浏览 482人参与
# 腾讯2025实习生招聘 #
16499次浏览 650人参与
# 两会劳动法放大招 #
28539次浏览 479人参与
# 双非应该如何逆袭? #
23720次浏览 827人参与
# bilibili求职进展汇总 #
42734次浏览 444人参与
# 安克创新求职进展汇总 #
20048次浏览 158人参与
# 应届生应该先就业还是先择业 #
84140次浏览 498人参与
# 投格力的你,拿到offer了吗? #
63499次浏览 502人参与
# 我的省钱小妙招 #
5546次浏览 168人参与
# 24届通信硬件秋招薪资爆料 #
75504次浏览 428人参与
# 电网笔面经互助 #
28381次浏览 294人参与
# 能让你振作起来的一句话 #
43297次浏览 365人参与
# 你投递的公司有几家约面了? #
57277次浏览 415人参与
# 如果中了500万,你会离职吗? #
59297次浏览 438人参与
# 网易有道工作体验 #
4892次浏览 19人参与
# 生物制药/化工公司爆料 #
14426次浏览 65人参与
# 我想象的实习vs现实的实习 #
261648次浏览 2105人参与