神刀安全网

这是淘宝面试经典的两道JavaScript面试题

题目一要求

  小贤是一条可爱的小狗(Dog),它的叫声很好听(wow),每次看到主人的时候就会乖乖叫一声(yelp)。从这段描述可以得到以下对象:

function Dog() {

      this.wow =function() {

              alert(’Wow’);

      }

      this.yelp =function() {

              this.wow();

      }

}

  小芒和小贤一样,原来也是一条可爱的小狗,可是突然有一天疯了(MadDog),一看到人就会每隔半秒叫一声(wow)地不停叫唤(yelp)。请根据描述,按示例的形式用代码来实现(提示关键字: 继承,原型,setInterval)。

题目一分析

  没什么好分析的,原型方式继承,用setInterval进行循环。代码如下:

function MadDog(){

}

MadDog.prototype=new Dog();

MadDog.prototype.yelp=function(){

    varself=this;

    setInterval(function(){

        self.wow();

    },500);

}

  这里要注意的是闭包的使用。

题目二要求

  请给Array本地对象增加一个原型方法,它的用途是删除数组条目中重复的条目(可能有多个),返回值是一个被删除的条目的数组。

题目二分析

  这道题考查的就是基本的算法了,最简单也是最容易想到的就是用双重循环进行判断:

Array.prototype.distinct =function() {

    varret = [];

    for(vari = 0, l =this.length; i < l – 1; i++) {

        for(varj = i + 1; j < l; j++) {

            if(this[i] ==this[j]) {

                ret.push(this.splice(j, 1)[0]);

                l =this.length;

j–;            }        }    }

return ret;

};

  这种方法效率不高,另外想到的一种方案就是用空间换时间,就是循环一次,在循环过程中用一个临时变量把不重复的存起来,然后判断当前元素是否是重复的,再进行处理:

Array.prototype.distinct2 =function() {

    varret = [],

        tempArr = {};

    for(vari = 0; i

        if(tempArr[this[i] + 1]) {

            ret.push(this[i]);

            this.splice(i, 1);

            i–;

            continue;

        }

        tempArr[this[i] + 1] =true;

    }

    tempArr =null;

    return ret;

};

  这里买个小关子,代码里有个this[i]+1,有人知道为什么要+1吗?

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » 这是淘宝面试经典的两道JavaScript面试题

分享到:更多 ()