javascript如何实现继承呢?
这是我写的一个基类
- JScript code
function Animal() { //私有变量 var _name; var _color; //公共变量 this.type = "我是动物"; //特权变量 this.setName = function (name) { _name = name; } this.getName = function () { return _name; } this.setColor = function (color) { _color = color; } this.getColor = function () { return _color; } //私有方法 function Action() { alert("我在大便,不要看!"); } //公用方法 this.Show = function () { alert("我是" + _name + ",我的颜色是" + _color); } //静态方法 Animal.Extend = function (NewObj) { NewObj.prototype = new Animal(); NewObj.prototype.constructor = NewObj["constructor"]; NewObj.prototype.method_d = NewObj["method_d"]; return NewObj; } }
就是在外面定义一个对象调用Extend方法后能实现继承Animal的公开成员。
类似这样。
- JScript code
var newObj = { // 定义公共属性 prototy_b: '123', //定义构造函数 constructor: function () { // 定义私有属性 var _id = '123456'; // 定义特权属性 this.name = 'bbbb'; // 定义特权方法 this.getId = function () { return _id; }; this.setId = function (id) { _id = id; } }, //定义方法 method_d: function () { alert("这是dog类的继承方法"); } }; var aimal = new Animal(); var dog= Animal.Extend(newObj );
希望高人指点
------解决方案--------------------
JavaScript中要实现继承,其实就是实现三层含义:
1、子类的实例可以共享父类的方法;
2、子类可以覆盖父类的方法或者扩展新的方法;
3、子类和父类都是子类实例的“类型”。
JavaScript中,并不直接从语法上支持继承,但是可以通过模拟的方法来实现继承,以下是关于实现继承的几种方法的总结:
1、构造继承法
2、原型继承法
3、实例继承法
4、拷贝继承法
1、构造继承法:
在子类中执行父类的构造函数。
- JScript code
<SCRIPT LANGUAGE="JavaScript"> 2 <!-- 3 function dwn(s) 4 { 5 document.write(s+'<br/>'); 6 } 7 8 //定义一个Collection类型 9 function Collection(size) 10 { 11 this.size = function(){return size}; //公有方法,可以被继承 12 } 13 14 //定义一个_Collection类型 15 function _Collection(_size) 16 { 17 this._size = function(){return _size}; //公有方法,可以被继承 18 } 19 20 Collection.prototype.isEmpty = function() //静态方法,不能被继承 21 { 22 return this.size() == 0; 23 } 24 25 //定义一个ArrayList类型,它“继承”Colleciton类型 26 function ArrayList() 27 { 28 var m_elements = []; //私有成员,不能被继承 29 m_elements = Array.apply(m_elements,arguments); 30 31 //ArrayList类型继承Colleciton 32 this.base = Collection; 33 this.base.call(this,m_elements.length); 34 35 this.base = _Collection; //可以实现多态继承 36 this.base.call(this,m_elements.length); 37 38 this.add = function() 39 { 40 return m_elements.push.apply(m_elements,arguments); 41 } 42 43 this.toArray = function() 44 { 45 return m_elements; 46 } 47 } 48 49 ArrayList.prototype.toString = function() 50 { 51 return this.toArray().toString(); 52 } 53 54 //定义一个SortedList类型,它继承ArrayList类型 55 function SortedList() 56 { 57 //SortedList类型继承ArrayList 58 this.base = ArrayList; 59 this.base.apply(this,arguments); 60 61 this.sort = function() 62 { 63 var arr = this.toArray(); 64 arr.sort.apply(arr,arguments); 65 } 66 } 67 68 //构造一个ArrayList 69 var a = new ArrayList(1,2,3); 70 dwn(a); //1,2,3 71 dwn(a.size()); //3 a从Collection继承了size()方法 72 dwn(a.isEmpty); //undefined 但是a没有继承到isEmpty()方法 73 74 dwn(a._size()); //3 可以实现多态继承 75 76 //构造一个SortedList 77 var b = new SortedList(3,1,2); 78 dwn(b.toArray()); 79 b.add(4,0); //b 从ArrayList继承了add()方法 80 dwn(b.toArray()); //b从ArrayList继承了toArray()方法 81 b.sort(); //b自己实现sort()方法 82 dwn(b.toArray()); 83 dwn(b); 84 dwn(b.size()); //b从Collection继承了size()方法 85 //--> 86 </SCRIPT>