面试题这种东西真的是反人类的设计,我觉得它的最大的作用就是用来打击我的信心。每当我觉得自己js水平还可以,的时候,它就会在不经意间跳出来,给我一耳光。例如这个,
var F = function(){};
Object.prototype.a = function(){};
Function.prototype.b = function(){};
var f = new F();
// f能得到a,b吗?啥原因?
当然了,这种东西也是网上瞎逛来的。最近在讲课,所以技术类的东西会多写一些。
回到这个题,我一看题目就明白,这是个js原型链的东西,于是我老神入定的脑补了几分钟,得出结论“f可以得到a,b”,呵呵,
然后打开F12控制台,运行了一下,然后我挨了一耳光,“f得不到b”
万事皆有因缘,f和b为何无缘?
简单的说,
f.a === Object.prototype.a //=> true
f.b === Function.prototype.b //=> false
就是“原型链上找不到b”,
这个题的关键词有二个,
1、prototype
2、__proto__
基础概念,
1、函数有prototype属性;
2、对象有__proto__;
在理解了上面的知识点的情况下,把你所能查到的所有的关于“JS原型链”的文章都看一遍,且保证看懂80%,那么上面那个题你就明白啦。
具体的js原型链的东西我这里就不写了,相关的文章资料已经很多。
想真正完全彻底的学会js,真的不是件容易的事情。