今天參加了百度2013年校園招聘杭州站的筆試,崗位是WEB前端工程師(上海)。有一道題目印象比較深,大概是因為筆者是從Java開始學編程的原因吧,對於面向對象和繼承的一些東西特別敏感。
題目大概是這樣的: 有一個CarFactory,專門產生一些汽車的對象,汽車類型有Bus, Truck, 和 Jeep, 他們有各自的引擎,分別為BusEngine, TruckEngine 和 JeepEngine,設計這樣一個Factory。
一開始覺得挺難,在自己的JavaScript開發過程中也沒有寫過類似的工廠方法。不過在仔細的思考下,大概還是寫出來了。貼上自己的答案,只寫了Bus,其它省略了。
//所有汽車的父類,每輛車都有一個引擎 var Car = function(engine){ this.engine = engine; }; //引擎的父類構造對象,為它設置了一個引擎的名字,和一個啟動的方法(這個在筆試里面沒有要求) var Engine = function(engineName){ this.engineName = engineName; }; Engine.prototype.run = function(){ console.log(this.engineName + ' is running'); }; //BusEngine的構造方法 var BusEngine = function(){ Engine.call(this, 'busEngine'); }; BusEngine.prototype = new Engine(); //Bus的構造方法 var Bus = function(){ Car.call(this, new BusEngine()); }; //Car工廠方法 var CarFactory = function(type){ return new type(); } //示例 var oneBus = CarFactory(Bus); oneBus.engine.run();
學前端才三四個月,因為同學的建議,投了百度。學的東西挺多,精通的太少。這也是我在筆試時能想到的最好的寫法了。