2018-05-30 10:12
中南财经政法大学 前端工程师 0 点赞 评论 收藏
分享
jiang_yuqiao:同楼上,三面大概也是同一个面试官。当时牌的顺序那道题没做出来...[手动捂脸] 蹭一蹭楼主的玄学吧
投递字节跳动等公司10个岗位 >
0 点赞 评论 收藏
分享
肉肉还是66的: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行
投递51信用卡等公司10个岗位 >
0 点赞 评论 收藏
分享
关注他的用户也关注了: