天天看点

Javascript和CSS的奇淫巧技

昨天面试了eBay的前台工程师,发现这些家伙果然是很厉害,钻研还是很深的。对于我这种前后台都做过,但是都不是非常精通的人来说,还是很深刻的一堂课。因为他们钻得比较深,所以也就问了一些看似叼钻的问题,至少我这半掉子的人是没有见过。当然我并不认为这些东西有多种要,可以说是奇淫巧技,用来炫耀的。

JS如下代码:

function Clazz(){

   var _name = 'class';

   setName = function(n){_name = n;}

   this.setName = function(n){setName(n);}

   this.getName = function(){return _name;}

}

var a = new Clazz();

var b = new Clazz();

var c = new Clazz();

a.setName('newclass');

console.log(a.getName());

console.log(b.getName());

console.log(c.getName());

你可以先猜一下答案,然后再到浏览器里面跑一下,看答案是否正确。反正我是错了,正确的答案是

==============================================================================

class

class

newclass

原因为何?因为是奇淫巧技,所以需要仔细。如果是普通的closure也是很容易判断的,你的答案应该不会错。但是这里居然自做聪明地先设置一个setName函数,然后在this.setName中再调用这个方法。正常的coding中谁会这么做呢?继续解释,开始的setName并没有加var,所以setName是一个全局变量,这样new Clazz三次之后,最后setName只是引用了c里面定义的local变量_name, 而a和b里面的setName实际上都是同一个,也就是说a.setName最后会调用全局的setName函数,从而修改了c的_name变量。而a和b本身的_name并没有变化,所以输出结果如上。

除了这么个问题之外,还有一个关于CSS的问题,就是说怎么用CSS来画三角形,圆形和常见的那种提示框。我猜测圆形应该是用CSS3圆角的功能可以实现,而其它的则不知到了。回来搜索之后发现有意个taobao的小姑娘写了一篇很好的文章。但是我觉得这个是不是太炫耀贴了,直接用图片不是好了,并且不用考虑太多的兼容问题。这篇文章大家可以参考一下,以免下次不知到如何回答。http://ued.taobao.com/blog/2010/08/04/css-border%E4%BD%BF%E7%94%A8%E5%B0%8F%E5%88%86%E4%BA%AB/

eBay的这些UI工程师还是挺不错的。感觉很好,感觉不大喜欢的是EMC那几个人。当然只是我面过的那几个人,感觉不好而已。不带表全部。随便说说而已,大家姑且听之,不必太认真。认真生活就没有意思了。譬如说不用纠缠韩寒是否作假,只要看着写的东西开心就好。

Javascript和CSS的奇淫巧技

继续阅读