JavaScript 继承的方法总结
2012-10-16 14:04
441 查看
<script type="text/javascript"> //方法可以归纳为四种:构造继承法,原型继承法,实例继承法和拷贝继承法 //+++++++++++++++++++++++++++++++++++++++++ //1. 构造继续法 //+++++++++++++++++++++++++++++++++++++++++ function Collection(size){ this.size = function(){return size}; //公有方法,可以被继承 } Collection.prototype.isEmpty = function(){ //静态方法,不能被继承 return this.size() == 0; } //定义一个ArrayList类型,它"继承"Collection类型 function ArrayList(){ var elements = []; //私有成员,不能被继承 elements = Array.apply(elements, arguments); //ArrayList类型继承Collection this.base = Collection; this.base.call(this, elements.length); this.add = function(){ return elements.push.apply(elements, arguments); } this.toArray = function(){ return elements; } } ArrayList.prototype.toString = function(){ return this.toArray().toString(); } //定义一个SortedList类型,它继承ArrayList类型 function SortedList(){ //SortedList类型继承ArrayList this.base = ArrayList; this.base.apply(this, arguments); this.sort = function(){ var arr = this.toArray(); arr.sort.apply(arr, arguments); } } function test1(){ //构造一个ArrayList var a = new ArrayList(1,2,3); println(a); println(a.size()); //a从Collection继承了size()方法 println(a.isEmpty); //但是a没有继承到isEmpty()方法 //构造一个SortedList var b = new SortedList(3,1,2); b.add(4,0); //b 从ArrayList继承了add()方法 println(b.toArray()); //b 从ArrayList继承了toArray()方法 b.sort(); //b 自己实现的sort()方法 println(b.toArray()); println(b); println(b.size()); //b从Collection继承了size()方法 } //+++++++++++++++++++++++++++++++++++++++++ //2. 原型继承法 //+++++++++++++++++++++++++++++++++++++++++ function Point(dimension){ this.dimension = dimension; } //定义一个Point2D类型,"继承"Point类型 function Point2D(x, y){ this.x = x; this.y = y; } Point2D.prototype.distance = function(){ return Math.sqrt(this.x * this.x + this.y * this.y); } Point2D.prototype = new Point(2); //Point2D继承了Point //定义一个Point3D类型,也继承Point类型 function Point3D(x, y, z){ this.x = x; this.y = y; this.z = z; } Point3D.prototype = new Point(3); //Point3D也继承了Point function test2(){ //构造一个Point2D对象 var p1 = new Point2D(0,0); //构造一个Point3D对象 var p2 = new Point3D(0,1,2); println(p1.dimension); println(p2.dimension); println(p1 instanceof Point2D); //p1 是一个 Point2D println(p1 instanceof Point); //p1 也是一个 Point println(p2 instanceof Point); //p2 是一个Point } //+++++++++++++++++++++++++++++++++++++++++ //3. 实例继承法 //+++++++++++++++++++++++++++++++++++++++++ function MyDate(){ //instance是一个新创建的日期对象 var instance = new Date(); instance.printDate = function(){ document.write("<p> "+instance.toLocaleString()+"</p> "); } //对instance扩展printDate()方法 return instance; //将instance作为构造函数的返回值返回 } function test3(){ var myDate = new MyDate(); //这回成功输出了正确的时间字符串,看来myDate已经是一个Date的实例了,继承成功 println(myDate.toGMTString()); //如果没有return instance,将不能以下标访问,因为是私有对象的方法 myDate.printDate(); } //+++++++++++++++++++++++++++++++++++++++++ //4. 拷贝继承法 //+++++++++++++++++++++++++++++++++++++++++ Function.prototype.extends = function(obj){ for(var each in obj) { this.prototype[each] = obj[each]; //对对象的属性进行一对一的复制,但是它又慢又容易引起问题 //所以这种"继承"方式一般不推荐使用 } } var Point2D = function(){ //…… }; Point2D.extends(new Point()) { //…… }; //+++++++++++++++++++++++++++++++++++++++++ //5. 混合继承法 //+++++++++++++++++++++++++++++++++++++++++ /*定义一个人类*/ function Person(name,age){ this.name=name; this.age=age; } /*定义一个学生类*/ function Student(name,age,grade){ //Person.apply(this,arguments); Person.call(this,name,age); this.grade=grade; } function test4(){ var student=new Student("lv",21,"Grade 1"); alert("name:"+student.name+"\n"+"age:"+student.age+"\n"+"grade:"+student.grade); } function println(mes){ if(window.console) console.log(mes); else alert(mes); } function main(){ test1(); test2(); test3(); } main(); </script>
转自:/article/1307138.html
相关文章推荐
- javascript 继承方法总结
- JavaScript继承方法总结
- JavaScript实现继承的4种方法总结
- JavaScript实现继承的4种方法总结
- JavaScript中call,apply,bind方法的总结(改变this指向)
- 【学习总结】对javascript中数组迭代方法的理解。
- IE和Firefox(火狐)在JavaScript方面的不兼容及统一方法总结
- 关于javascript数组的定义与其一些常用方法总结
- javascript入门·对象属性方法大总结
- JavaScript 数组- Array的方法总结(推荐)
- JavaScript加密解密7种方法总结分析
- JavaScript跨域方法总结
- Javascript研究: 创建对象方法的总结
- Javascript 定义类或对象的方法总结
- JS继承的几种方法总结
- JavaScript数组方法总结
- 转:JavaScript数组方法总结
- 关于Javascript与表单结合时出现"对象不支持此属性或方法"的问题总结(不断更新中...)
- JavaScript中的继承以及实现继承的几种方法