题目一要求
小贤是一条可爱的小狗(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 吗?
来源: http://www.jianshu.com/p/787595a196b9