biaoge's blog

以前端技术为主

淘宝2007年的一道面试题

with one comment

淘宝2007年有这样一个面试题

小贤是一条可爱的小狗(Dog),它的叫声很好听(wow),每次看到主人的时候就会乖乖叫一声(yelp)。

从这段描述可以得到以下对象:

function Dog() {
    this.wow = function() {
        alert(’Wow’);
    }
    this.yelp = function() {
        this.wow();
    }
}

小芒和小贤一样,原来也是一条可爱的小狗,可是突然有一天疯了(MadDog),一看到人就会每隔半秒叫一声(wow)地不停叫唤(yelp)。

请根据描述,按示例的形式用代码来实现(提示关键字: 继承,原型,setInterval)。

淘宝UED上给出的答案是:

function MadDog() {
    this.yelp = function() {
        var self = this;
        setInterval(function() {
            self.wow();
        }, 500);
    }
}
MadDog.prototype = new Dog();
//for test
var dog = new Dog();
dog.yelp();
var madDog = new MadDog();
madDog.yelp();

经过我的测试发现:如果把self.wow后面的括号去掉,那么外面那层匿名函数也是可以去掉了,所以setInterval部分可以这么写:

setInterval(self.wow,500);

后来我又尝试了两外一种解法:

MadDog=new Function;
MadDog.prototype=new Dog();
MadDog.prototype.yelp=function() {
    setInterval(this.wow,500);
}
//for test
var madDog=new MadDog();
madDog.yelp();

这种写法看上去要比淘宝上的答案要简单,经测试也是可以达到题目要求的。既然MadDog的yelp方法要变,那就就直接在后面把从Dog继承来的prototype属性覆盖一遍就OK了,不知道这种写法有没有什么不妥,毕竟人家都是高手,而我只是菜鸟一个。

Related Posts

Written by admin

October 13th, 2008 at 11:11 pm

Posted in 前端技术

One Response to '淘宝2007年的一道面试题'

Subscribe to comments with RSS or TrackBack to '淘宝2007年的一道面试题'.

  1. 哈哈。。无意中闯入,看到这么有趣的题。。。
    我也给个答案,直接借用父类的构造函数:

    function MadDog(){
    Dog.apply(this,null);
    this.yelp=function(){
    var _this=this;
    setInterval(_this.wow,500)
    }
    }

    QiQiBoY

    4 Dec 10 at 10:50 pm

Leave a Reply