YUI的團隊正在為世界級的工程師,前端CI,生成系統和QA工作

,2010年1月28日上午8:30埃里克米拉利亞|在發展前端工程作業雅虎 | 13評論

注:現在,我們已經聘請了這一立場。 額外銳在雅虎的相關工作,請檢查YUI工作頁

如果喜歡 ​​的人一起工作道格拉斯克羅克福德和創建YUI的 (特里普盧克·史密斯馬特·斯威尼亞當·摩爾DAV玻璃珍妮·唐納利 ,橋樑, 艾倫拉比諾維奇阿拉里克科爾Satyen德賽 ,和其他人)的團隊,聽起來像一個好辦法花你的時間,閱讀:我們聘用。

我們正在尋找一個偉大的工程師,以幫助我們改進我們的持續集成(CI)過程的每一個方面,包括我們建立的方式,文檔,測試,部署我們的代碼。 在這個角色要取得成功,你必須是:

  • 熟悉前端工程的最佳做法(例如, 這部影片應該好好給你的感覺);
  • 持續集成的目標和原則的知識;
  • 感興趣的新興學科的前端代碼的自動測試(例如這個視頻上半年,這個應該給你的感覺,像項目TestSwarm應該是非常有趣);
  • 能夠解決各種問題的技術異構集(如/ Python中的DHTML /的Java /螞蟻/ LINUX / PHP / JavaScript的);
  • 興奮CI為YUI的過程創建一個國家的藝術和整個雅虎和超越福音。

YUI是一個開源項目,很多件,你的工作與YUI的生態系統的一部分。 開始我們的YUI的Builder工具,並延伸到我們現有的CI過程的組成部分-像工具, YUI YUI壓縮 文件YUI測試 你將有機會改善自己的工具,並提高他們的記錄和使用的方式。

任何技術工作的最好的部分是有機會做有影響力的環境中工作,既是挑戰,也是支持你的成長。 YUI團隊提供只是,合流的特點:一個巨大的用戶和開發人員,從事社會和團隊合作提高項目每天的輝煌工程師。

如果這聽起來像你夢想的工作,如果我在上面的人提到像你每天要工作的人的聲音,我很想聽到你的。 告訴我你為什麼對這個角色的合適人選,其中包括一個鏈接到您的簡歷和專業組合,通過電子郵件YUI [衝刺]工作[]雅虎inc.com。 (校長;沒有招聘)。

共享和擴展: 書籤del.icio.us Digg它! | reddit!

克羅克福德:夜上的JavaScript重溫,和更多的門票發表

,2010年1月26日在下午2時25分由埃里克·米拉利亞在YUI的活動 | 評論關閉

約200人聚集在咖啡廳的網址在雅虎昨晚採取的首期克羅克福德的JavaScript系列講座 道格拉斯率先通過了計算機科學和編程語言的選擇歷史的觀眾,重點對這些功能,並約定以後將形成對JavaScript的演變。

雖然我們從昨晚的視頻工作,我們希望分享了幾張照片 ,讓你知道,我們正在調整我們的售票限制-如果你訪問“系列講座”頁面,並按照RSVP鏈接,你將看到此前被列為售罄的一些會議的可用性。

共享和擴展: 書籤del.icio.us Digg它! | reddit!

在為2010年1月19日,野生

2010年1月19日,7:32上午埃里克米拉利亞|在野生 | 評論關閉

新聞及票據遵循從銳界在過去的一周。 與往常一樣,請讓我們通過的意見或知道yuilibrary @如果我們錯過了好東西。

共享和擴展: 書籤del.icio.us Digg它! | reddit!

在為2010年1月10日,野生

1月8日,2010上午9:18 |在由Eric米拉利亞在野外 | 2評論

新聞和銳界注意到,在過去的一個月......讓我們在評論或知道yuilibrary @如果我們錯過了一些重要:

共享和擴展: 書籤del.icio.us Digg它! | reddit!

更多的代碼重用的模式,在YUI3

2010年1月7日,6時41分上午斯托揚STEFANOV | 開發 | 2評論

斯托揚STEFANOV。 作者簡介:: 斯托STEFANOV@ stoyanstefanov )是在雅虎搜索的前端工程師。 他也是YSlow的2.0 smush.it形象優化,揚聲器和技術作家共同創作的建築師。 他的最新著作被稱為面向對象的JavaScript

這是一篇文章“傳承模式的後續YUI3“潛入YUI3代碼重用模式的API更深。 四本書剛主張,我們應該“寧可對象組成的類繼承”。 而事實上,繼承有時被用來作為一個強類型語言在編譯時需要固定對象或類的簽名的解決方法。 JavaScript是鬆散類型和對象可以組成混合,並隨時增加。

充實的對象

在現實生活中的JavaScript,它是罕見的,你就必須設置深的繼承鏈。 通常情況下,你可能只是想不必然形成了親子關係,擴充現有的對象(或構造)的另一個成員。 YUI提供的的方法Y.augment(...)來做到這一點。

下面的例子說明之間的差異與正確的繼承Y.extend(...)用簡單的對象增強Y.augment(...)

 / /父,又名供應商的功能
函數編程(){}
 Programmer.prototype.writeCode =函數(){};

 / /構造函數得到增強與供應商的成員
功能CodeMonkey(){}
 Y.augment(CodeMonkey,程序員);
猴子=新CodeMonkey();

 / /構造函數的繼承從父供應商
功能大師(){}
 y.extend(師,程序員);
 VAR大師=新大師();

現在,我們已經重用Programmer在兩個方面的功能,讓我們的測試結果。 這兩個對象的monkeyguru得到writeCode()的方法,但只有guru是繼承鏈的一部分。

提醒(monkey.writeCode typeof運算); / /“功能”
提醒(guru.writeCode typeof運算); / /“功能”

 / /猴子是不是一個程序員,而大師是
警報(猴子的instanceof程序員); / /假
警報(大師的instanceof程序員); / / TRUE

Y.augment(...)也可以採取一個對象(而不是一個構造)被擴大。

 VAR n00b = {};
 Y.augment(n00b,程序員);

 / /現在,n00b可以writeCode
提醒(n00b.writeCode typeof運算); / /“功能”

Y.augment(...)允許收件人是從供應商的代碼重用時更挑剔。 一個可選的第三個參數Y.augment(...)定義現有的屬性是否應該覆蓋(默認情況下, false ,這意味著維護收件人的原始屬性)。 第四個參數,可以選擇提供一個白名單 - 一個數組,其中包含應結轉的屬性的名稱。

克隆

克隆的對象是另一個代碼的重用,它允許你創建全新的對象只是喜歡現有的格局。 在某種程度上,這個想法是類似的原型繼承(見Y.Object(...)在以前的文章),對象從對象繼承。 主要區別在於克隆時,父母的屬性被複製到孩子直接通過原型鏈。

Y.clone(...)創建了一個深拷貝,這意味著它通過數組和對象屬性的遞歸。 它還創建值的副本,使克隆的對象不修改錯誤(JavaScript數組,對象和功能參考複製)的母公司。

為了說明差異,考慮的對象pro ,被克隆到一個新的對象clone ,也繼承wiz使用Y.Object(...)

 / /原始對象
 VAR親= {groks:['HTML']};

 / /繼承
 VAR的WIZ = Y.Object(親);

 / /克隆
克隆= Y.clone(親);

現在讓我們添加一個新的數組元素的原始對象

 pro.groks.push(“CSS”);

子對象看到更新後的值,而克隆不會,因為克隆是快照克隆的對象是什麼。

 wiz.groks.join(); / /“HTML,CSS”
 clone.groks.join()/ /“HTML”

這個工程以及周圍其他方式 - 當孩子修改數組。

 wiz.groks.push(“JS”);
 pro.groks.join(); / /“HTML,CSS,JS”
 clone.groks.join()/ /“HTML”

克隆的討論

正如你可以看到Y.clone(...)創建新的對象深複製其所有的屬性和方法。 雖然這可能不是你通常會調用繼承,它仍然是一個非常簡單和直接的代碼重用的模式。 畢竟代碼重用是如何避免重複代碼需要和重用現有功能。

您可能想知道的東西 - 性能如何呢? 是不是這樣低效的複製值。 答案是 - 是,它可能是低效的。 但對於大多數應用程序很少會成為瓶頸。 事實上的Firebug (Firefox擴展是用JavaScript編寫的),這是一個相當複雜的軟件有一個extend()方法,通過簡單複製從父對象到子對象的屬性,使用淺拷貝(不遞歸到對象和數組)

因此,自克隆僅僅是從一個對象到另一個深拷貝的屬性,也不會是很好的,如果你可以從多個對象繼承的功能,不僅從一個呢? 這是Y.merge(...)來幫助你與這個組合的排序對象。

mixin的對象與Y.merge(...)

混入模式讓您可以抓取多個對象的屬性和方法,並進行他們進入一個新的對象。 YUI3提供的的方法Y.merge(...)可採取任何數量的對象,並返回一個單一的,這是一個所有源對象的組合。

下面是一個例子:

組合:= {VAR mad_skillz烘烤:函數(){}(){},吃:函數(){}};
 VAR成分= {糖:“很多”,麵粉:1,雞蛋:2};
 VAR =乳品{牛奶:1};

 / /混入
蛋糕= Y.merge(mad_skillz,配料,乳品);

現在你可以測試屬性已經結轉到cake對象,使用便捷的方法Y.Object.keys(...)讓你的所有屬性名稱陣列。

 (蛋糕)。Y.Object.keys加入(); / /“烤,拌,吃,糖,麵粉,蛋,奶”

Y.merge(...)類似於克隆,但深複製一個對象,而不是,它會創建一個淺表副本,並可以採取多種混合用同樣的方法調用的對象。 被覆蓋的邏輯Y.merge(...)在物業命名衝突的情況下比大多數其他方法是不同的-如果你有兩個相同的名字,最後一勝的成員,並覆蓋以前的。

只是想與Y.clone(...) Y.merge(...)不一定僅限於代碼重用的目的。 你也可以使用它們用於處理數組或哈希樣的對象,如配置對象,排序。

Y.mix(...)

Y.mix(...)是較低級別的方法背後最上面討論的功能。 它為您提供細粒度控制哪些屬性被複製和確切位置。 它還允許你合併兩個具有相同名稱的屬性,忽略某些屬性等。

下面是一個使用有點複雜的例子Y.mix(...)的API:

 / /對象
 VAR親= {
   groks:['HTML','CSS','JS'],
  者說:['拉丁'],
  鳴叫:真
 };

 / /構造函數
功能WebGuru(){}

 / /增強的構造原型
 / /與一些親的屬性
 y.mix(WebGuru,親,真實,['groks“,”鳴叫“,4);

 / /測試
 VAR大師=新WebGuru();
 guru.groks.join(); / /“HTML,CSS,JS”
 guru.tweets; / /真
 guru.speeks; / /未定義

如果您在通話中尋找到Y.mix(...)我們有5個參數,含義:

  1. WebGuru得到更多的成員...
  2. pro ...
  3. 覆蓋任何現有的...
  4. 只有當他們在這個白名單陣列['groks', 'tweets'] 這意味著將不會被混合speaks財產
  5. 四是模式。 有五個混合模式- 0至4,4表示的原型 WebGuru成員將收到來自pro

你可以檢查文檔上所接受的參數的更多信息Y.mix(...)

這是所有的人!

謝謝您的閱讀! YUI3 OOP的功能的更多信息和例子,你可以參考以下鏈接:

共享和擴展: 書籤del.icio.us Digg它! | reddit!

在YUI的繼承模式3

2010年1月6日6:30上午斯托揚STEFANOV | 開發 | 2評論

斯托揚STEFANOV。 作者簡介:: 斯托STEFANOV@ stoyanstefanov )是在雅虎搜索的前端工程師。 他也是YSlow的2.0 smush.it形象優化,揚聲器和技術作家共同創作的建築師。 他的最新著作被稱為面向對象的JavaScript

本文討論了兩個JavaScript代碼重用的格局,在實施銳3 -經典的遺傳模式和原型繼承模式。

令人滿意的依賴

原型模式是從核心銳3 API在YUI-min.js種子的文件。 經典模式需要oop模塊,但自從oop模塊是其他模塊的要求,你通常不會有做什麼特別的東西來獲得此功能。 但如果你想創建一個簡單的測試頁,發揮自己的模式,你能滿足的依賴,像這樣由包括銳:

  <script type="text/javascript" src="http://yui.yahooapis.com/3.0.0/build/yui/yui-min.js"> </ SCRIPT>
 <SCRIPT>
 YUI的()。使用(“空中接力”,功能(Y){
   / /你的代碼放在這裡
   / / Y是YUI的實例
 });
 </ SCRIPT>

(偽)經典的繼承

你可以調用這個模式的“經典”不是,因為它從柏拉圖的古希臘,但因為它有助於你認為類。 JavaScript沒有類(因此“偽”的一部分),但它的構造函數,而不是。

在Java或其他語言,你可以從Programmer Person Person類有一個Programmer類繼承。 在JavaScript中,你實際上有一個Programmer的構造函數和Person Person的構造函數。 我們的目標是有創建的對象的Programmer構造繼承的屬性和方法,如果他們與Person的構造。

考慮這兩個構造函數:

 / /父
功能的人(){
   / /“自己”的成員
   this.name =“亞當”;
 }

 / /屬性的父的原型
 Person.prototype.getName =函數(){
  返回this.name;
 };

 / /孩子的構造
函數編程(){}

YUI的3 oop模塊的提供的Y.extend(...)的方法來幫助你繼承遺產的一部分。 它是那樣簡單:

  y.extend(程序員,人); 

然後,您可以測試getName()方法是正確的繼承:

 VAR大師=新程序員();
提醒(guru.getName typeof運算); / /“功能”

需要注意的是, Y.extend(...)方法只會繼承的原型,而不是“自己”的成員。 它被認為是一個很好的做法,添加所有可重複使用的功能樣機,並留下自己的屬性(添加到所有的實例特定的屬性this 在上面的例子中,唯一getName()得到繼承,而name不。 (在你的原型繼承模式 - 在文章中進一步討論 - 繼承原型和自己的成員。)

延伸和補充

Y.extend(...)允許你從一個父類的構造函數和同時增加新成員的孩子繼承。 其實,這是事實上的模式由銳用於建立“類”擴展。

您可以添加屬性到孩子的構造函數的原型,使用第三個參數Y.extend(...)你可以添加屬性的構造本身(類的靜態屬性)使用第四個參數。

下面是一個在同一時間的延長和充實的例子:

 y.extend(程序員,人,{groksHTML:真},{極限:“天空”});

 / / groksHTML的,現在是一個孩子的原型屬性
提醒(Programmer.prototype.groksHTML typeof運算); / /“布爾”

 / /屬性適用於所有新對象
 VAR鮑勃=新程序員();
警報(bob.groksHTML); / /真

 / /添加到構造更適合 
 / /“靜態”屬性意味著作為常數
警報(Programmer.LIMIT); / /“天空”
 VAR限制bob.LIMIT; / /未定義

以上所述的pseudoclassical模式,讓你進入superclass通過靜態的屬性稱為父類的構造原型。

superclass家長和原型點superclass.constructor點的父構造函數。 考慮一個例子:

 / /繼承
 y.extend(程序員,人);

 / /孩子的訪問父類的構造函數
父= Programmer.superclass.constructor; 
 / /測試
警報(父===人); / / TRUE

 / /訪問父,從孩子的一個實例
 VAR大師=新程序員();
 guru.constructor.superclass.constructor ===人; / /真

如前所述,與傳統的模式,你只能繼承原型成員。 但使用的superclass也可以從孩子的父類的構造函數初始化和得到父母的孩子自己的屬性自己的屬性。

你可以修改Programmer構造調用父類的構造函數,傳遞的子對象( this )和任何初始化參數

 / / ... 父定義一樣顯示之前...

 / /子
函數編程(){
   / /初始化父“本”的孩子
   Programmer.superclass.constructor.apply(這一點,參數);
 }

 / /繼承
 y.extend(程序員,人);

 / /測試
 VAR親=新程序員();
警報(pro.name); / /“亞當”

正如你可以看到,現在的編程實例有name name屬性,這是一個自己的財產。

  警報(pro.hasOwnProperty('名稱')); / / TRUE
  警報(pro.hasOwnProperty('的getName')); / /假  

訪問覆蓋的方法

事實上, superclass到父原型重寫的方法讓孩子獲得。 考慮這個典型的例子,繼承Triangle Shape Triangle

 / /父
函數的形狀(){}
 Shape.prototype.toString =函數(){
  返回“形”;
 };

 / /子
函數三角(){}

 / /繼承
 y.extend(三角形狀);

 / /子覆蓋父的toString()方法
 / /但由於超類的屬性
 / /它仍然有原來的方法
 Triangle.prototype.toString =函數(){
  返回Triangle.superclass.toString()+“三角”;
 };

 / /測試
 VAR急性=新三角();
 “形,三角”acute.toString();

原型繼承

道格拉斯克羅克福德表明,這種繼承模式,你忘了所有關於類和對象從其他對象繼承。 例如:

 / /父對象,創建一個簡單的對象字面
 VAR父= {
  名稱:“約翰”
  家人:“韋恩”,
  說:(){
    回到“我”+ this.name +“”+ this.family;
   }
 };

 / /繼承魔
 / /一個新的對象是從現有的出生
 VAR蝙蝠俠,= Y.Object(母公司);

 / /自定義或增加新的對象
 batman.name =“李小龍”;

 / /使用
 batman.say(); / /我是布魯斯·韋恩

使用這種模式設立的對象有兩個步驟:

  1. 你創建一個新的對象,繼承從現有對象的屬性和方法。
  2. 您可以自定義新的對象 - 可以覆蓋一些成員或添加新的品牌。

請注意, Y.Object(...)是在YUI核心。 你不必包括oop模塊。

原型繼承討論

如果你好奇的原型繼承背後的動機,以及它如何引擎蓋下,你可以學習模式中描述的Douglas Crockford的自己的話

使用這種模式,通過原型鏈繼承父的成員。 這意味著,如果添加具有相同名稱的子屬性,新的屬性不會覆蓋從父項繼承的,但它會優先考慮。 換句話說,你可以重新定義的say ,像這樣的方法:

 batman.say =函數(){
  返回“無法告訴你我的真實姓名”;
 };

 / /測試
 batman.say(); / /“不能告訴你我的真實姓名”

不像在經典遺傳模型,給予Y.extend ,有沒有辦法來引用父say從子對象的方法say (vis. superclass )。 不過,如果你刪除的say子對象的方法,父母的say將“閃耀通過”。

刪除batman.say;
 batman.say(); / /“我是布魯斯·韋恩”

在ECMAScript 5

ECMAScript標準的新版本,包括通過本地方法稱為原型及繼承格局Object.create(...)

 / / YUI3
 VAR蝙蝠俠,= Y.Object(母公司);

 / /的ECMAScript 5(未來)
 VAR蝙蝠俠= Object.create(父);

更多?

非常感謝您的閱讀! 在這篇文章中討論的兩種模式的更多信息和例子,你可以參考以下鏈接:

請繼續關注為後續的文章,討論YUI3甚至更多的代碼重用的模式。

共享和擴展: 書籤del.icio.us Digg它! | reddit!

克羅克福德提供在山景“國家和JavaScript的未來”講座,於1月13日在累加器

2010年1月5日,10:46上午由埃里克·米拉利亞|在發展YUI活動 | 評論關

在累加器克羅克福德1​​月13日。

道格拉斯克羅克福德將在“再發生他的演講的國家元首和JavaScript的未來 “在未來的累加器1月13日在山觀聚會 這次活動是免費向公眾開放;賽門鐵克託管其山景校園事件。

雅虎還舉辦公開講座系列, 於JavaScript克羅克福德 ,從這個月開始-還免費向公眾開放(RSVP的要求)。

共享和擴展: 書籤del.icio.us Digg它! | reddit!

下一頁»
主辦雅虎

©2006-2012雅虎公司所有權利保留。 隱私政策 - 服務條款

支持WordPress的關於雅虎 虛擬主機