百度web前端的一道笔试题(CarFactory)

 今天参加了百度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();            

  学前端才三四个月,因为同学的建议,投了百度。学的东西挺多,精通的太少。这也是我在笔试时能想到的最好的写法了。

你可能感兴趣的:(factory)