javascript 继承(extend)
2012-11-26 21:45
344 查看
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>javascript 继承</title> <script type="text/javascript" src="js/common.js"></script> <script type="text/javascript"> //继承 println("---继承---"); println("---原型链---"); function SuperType(){ this.superProperty = true; } SuperType.prototype.getSuperProperty = function(){ return this.superProperty; } function SubType(){ this.subProperty = false; } SubType.prototype = new SuperType(); SubType.prototype.getSubProperty = function(){ return this.subProperty; } var sub = new SubType(); println("superProperty = " + sub.getSuperProperty() + ", subProperty = " + sub.getSubProperty()); //借用构造函数继承 println("----借用构造函数继承,无法继承父类原型中的方法----"); function Animal(name, color){ this.name = name; this.color = color; this.sayName = function(){ println("name = " + this.name); } } Animal.prototype.showInfo = function(){ println("name = " + this.name + ", color = " + this.color); }; function Dog(name,color){ Animal.apply(this, arguments);//本质:在子类的构造函数中调用父类的构造函数,所有父类原型中的方法必不能在子类中继承下来 } var dog = new Dog("dog","white"); //dog.showInfo();//不能调用,没有从父类继承 dog.sayName(); //组合使用原型继承和构造函数继承 println("---组合使用原型继承和构造函数继承,完美,能继承父类所有的方法---"); function Pig(name,color){ Animal.apply(this, arguments);//第二次调用父类构造方法;//or use call method } Pig.prototype = new Animal();//第一次调用父类构造方法 Pig.prototype.sayColor = function(){ println("color = " + this.color); } var pig = new Pig("pig", "colorful"); pig.sayName(); pig.sayColor(); pig.showInfo(); //原型式继承 println("---原型式继承---"); //原理 function object(o){ function F(){} F.prototype = o; return new F(); } var car = { name:"laoshi", drivers:["jhon", "kitty"] } var otherCar = object(car); println(otherCar.drivers.join(",")); var anotherCar = object(car); otherCar.drivers.push("noty"); println(anotherCar.drivers.join(",")); //在ECMAScript5中规范了此原型式继承:使用Object.create()方法 var person = { name:"zizhu", friends:["xia", "xu"] } var p1 = Object.create(person); var p2 = Object.create(person); p1.friends.push("yan"); println("after p1 push yan, and p2.friends = " + p2.friends.join(",")); //寄生式继承 println("---寄生式继承---"); function createAnother(original){ var clone = object(original);//复制original对象 clone.sayName = function(){//增强原来对象的方法 println("name = " + this.name); } return clone; } var another = createAnother(person); another.sayName(); //寄生组合式继承 println("----寄生组合式继承---"); function Shape(name,count){ this.name = name; this.count = count; } Shape.prototype.showInfo = function(){ println("name = " + this.name + ", count = " + this.count); } function Triangle(name, count){ Shape.apply(this, arguments); } //继承核心函数 function inheritProperty(sub, sup){ var proto = Object.create(sup.prototype); proto.constructor = sub; sub.prototype = proto; } inheritProperty(Triangle, Shape); Triangle.prototype.sayName = function(){ println("name = " + this.name); } var triangle = new Triangle("三角形",3); triangle.showInfo();//从父类继承 triangle.sayName(); </script> </head> <body> </body> </html>
相关文章推荐
- 算法-javascript自实现继承extend(单次继承原型对象和单次继承构造函数)
- 阅读Ext 学习Javascript(二)Core/Ext.extend 从继承说起
- 阅读Ext 学习Javascript(二)Core/Ext.extend 从继承说起
- 阅读Ext 学习Javascript(二)Core/Ext.extend 从继承说起
- JavaScript组合式继承--extend
- javascript中最好用的extend继承方法
- 阅读Ext 学习Javascript(二)Core/Ext.extend 从继承说起
- javascript 原型继承 extend
- JavaScript将继承部分封装成函数extend
- JavaScript和ExtJS的继承 Ext.extend Ext.applyIf (转)
- JavaScript和ExtJS的继承 Ext.extend Ext.applyIf
- ExtJS学习------Ext.define的继承extend,用javascript实现相似Ext的继承
- 阅读Ext 学习Javascript(二)Core/Ext.extend 从继承说起
- 【JavaScript】 使用extend继承对象的prototype方法
- JavaScript原型与继承
- JavaScript原型、函数伪装(apply,call)、继承
- JavaScript 面向对象程序设计(下)——继承与多态
- [原]Java程序员的JavaScript学习笔记(2——属性复制和继承)
- JavaScript中Java式的类的继承
- JavaScript面向对象编程(9)快速构建继承关系之整合原型链