天天看點

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的奇淫巧技

繼續閱讀