12月30日 2013年,作者 Alex MacCaw, 翻译:myownghost 注:之前我们介绍过:一名靠谱的JavaScript程序员应备的素质,从程序员的角度提出要去学习哪些知识,下面这篇文章从面试官的角度介绍到面试时可能会问到的一些问题。 第一部分:Object Prototypes (对象原型) spacify('hello world') // => 'h e l l o w o r l d' 尽管这个问题似乎非常简单,其实这是一个很好的开始,尤其是对于那些未经过电话面试的侯选人——他们很多人声称精通JavaScript,但通常连一个简单的方法都不会写。 function spacify(str) { 接下来,我会问侯选人,如何把这个方法放入String对象上面,例如: 'hello world'.spacify(); 问这个问题可以让我考察侯选人是否对function prototypes(方法原型)有一个基本的理解。这个问题会经常引起一些有意思的讨论:直接在对象的原型(prototypes)上添加方法是否安全,尤其是在Object对象上。最后的答案可能会像这样: String.prototype.spacify = function(){ 到这儿,我通常会让侯选人解释一下函数声明和函数表达式的区别。 第二部分:参数 arguments log('hello world') 我会让侯选人去定义log,然后它可以代理console.log的方法。正确的答案是下面几行代码,其实更好的侯选人会直接使用apply. function log(msg) { 他们一旦写好了,我就会说我要改变我调用log的方式,传入多个参数。我会强调我传入参数的个数是不定的,可不止两个。这里我举了一个传两个参数的例子。 log('hello', 'world'); 希望你的侯选人可以直接使用apply。有时人他们可能会把apply和call搞混了,不过你可以提醒他们让他们微调一下。传入console的上下文也非常重要。 function log(){ 接下来我会让侯选人给每一个log消息添加一个"(app)"的前辍,比如: '(app) hello world' 现在可能有点麻烦了。好的侯选人知道arugments是一个伪数组,然后会将他转化成为标准数组。通常方法是使用Array.prototype.slice,像这样: function log(){ 第三部分:上下文 var User = { 我又写了下面几行,然后问侯选人log输出的会是什么。 console.log(User.getCount()); 这种情况下,正确的答案是1和undefined。你会很吃惊,因为有很多人被这种最基础的上下文问题绊倒。func是在winodw的上下文中被执行的,所以会访问不到count属性。我向侯选人解释了这点,然后问他们怎么样保证User总是能访问到func的上下文,即返回正即的值:1 var func = User.getCount.bind(User); 接下来我通常会说这个方法对老版本的浏览器不起作用,然后让侯选人去解决这个问题。很多弱一些的侯选人在这个问题上犯难了,但是对于你来说雇佣一个理解apply和call的侯选人非常重要。 Function.prototype.bind = Function.prototype.bind || function(context){ 第四部分:弹出窗口(Overlay library) .overlay { 他们如何让里面的内容居中也是需要考察的一点。一些侯选人会选择CSS和绝对定位,如果内容有固定的宽、高这是可行的。否则就要使用JavaScript. .overlay article { 我也会让侯选人确保当遮罩被点击时要自动关闭,这会很好地考查事件冒泡机制的机会。通常侯选人会在overlay上面直接绑定一个点击关闭的方法。 $('.overlay').click(closeOverlay); 这是个方法,不过直到你认识到点击窗口里面的东西也会关闭overlay的时侯——这明显是个BUG。解决方法是检查事件的触发对象和绑定对象是否一致,从而确定事件不是从子元素里面冒上来的,就像这样: $('.overlay').click(function(e){ 其他方面 原文地址: blog. http:///detail/52c4145d7986593603000009 |
|
来自: JhouShuai > 《JAVASCRIPT》