前端攻城狮学习笔记五:继承、原型、setInterval、数组去重
2012-07-07 10:10
281 查看
这是淘宝UED招聘题中的两道JavaScript题目。
小芒和小贤一样,原来也是一条可爱的小狗,可是突然有一天疯了(MadDog),一看到人就会每隔半秒叫一声(wow)地不停叫唤(yelp)。请根据描述,按示例的形式用代码来实现(提示关键字: 继承,原型,setInterval)。
这里要注意的是闭包的使用。
这种方法效率不高,另外想到的一种方案就是用空间换时间,就是循环一次,在循环过程中用一个临时变量把不重复的存起来,然后判断当前元素是否是重复的,再进行处理:
这里买个小关子,代码里有个this[i]+1,有人知道为什么要+1吗?
题目一要求
小贤是一条可爱的小狗(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(){ var self=this; setInterval(function(){ self.wow(); },500); }
这里要注意的是闭包的使用。
题目二要求
请给Array本地对象增加一个原型方法,它的用途是删除数组条目中重复的条目(可能有多个),返回值是一个被删除的条目的数组。题目二分析
这道题考查的就是基本的算法了,最简单也是最容易想到的就是用双重循环进行判断:Array.prototype.distinct = function() { var ret = []; for (var i = 0, l = this.length; i < l - 1; i++) { for (var j = 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() { var ret = [], tempArr = {}; for (var i = 0; i < this.length; 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吗?
小结
这两题考察的内容都比较基础,主要考察了继承、原型、setInterval、闭包、基本算法等。期待高手给出不同方案。相关文章推荐
- 前端攻城狮学习笔记一:实现一个遍历数组或对象里所有成员的迭代器
- 前端攻城狮学习笔记九:让你彻底弄清offset
- HTML5学习笔记(十六):原型、类和继承【JS核心知识点】
- JS学习笔记——JavaScript继承的6种方法(原型链、借用构造函数、组合、原型式、寄生式、寄生组合式)
- java学习笔记继承、多态和数组
- javascript之对象学习笔记(二)--对象原型,继承
- 前端攻城狮学习笔记九:让你彻底弄清offset
- 前端攻城狮学习笔记六:常见前端面试题之HTML/CSS部分(一)
- 前端攻城狮学习笔记八:自己实现string的substring方法,人民币小写转大写,数字反转,正则优化
- [前端JS学习笔记]JavaScript 数组
- 2016.06.15廖雪峰JS__学习笔记(原型继承)__P9
- 【Jquery】前端学习记录(1)【assign()、sort()、数组原型、 手机号码、前几天、数组、视频】
- 【学习笔记】lua中基于原型的继承
- 前端攻城狮学习笔记九:让你彻底弄清offset
- 前端攻城狮学习笔记四:点击ul下的li时alert其index值(闭包的应用)
- JavaScript高级程序设计(第2版) 学习笔记:(六)js基于构造函数与原型的继承
- JavaScript学习笔记-原型继承
- javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
- [前端JS学习笔记]JavaScript 数组
- JavaScript 的原型继承与类式继承学习笔记