javascript 实现继承。
javascript如何实现继承呢?
这是我写的一个基类
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; } }
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 );
<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 }1314 //定义一个_Collection类型15 function _Collection(_size)16 {17 this._size = function(){return _size}; //公有方法,可以被继承18 }1920 Collection.prototype.isEmpty = function() //静态方法,不能被继承21 {22 return this.size() == 0;23 }2425 //定义一个ArrayList类型,它“继承”Colleciton类型26 function ArrayList()27 {28 var m_elements = []; //私有成员,不能被继承29 m_elements = Array.apply(m_elements,arguments);3031 //ArrayList类型继承Colleciton32 this.base = Collection;33 this.base.call(this,m_elements.length);3435 this.base = _Collection; //可以实现多态继承36 this.base.call(this,m_elements.length); 3738 this.add = function()39 {40 return m_elements.push.apply(m_elements,arguments); 41 }4243 this.toArray = function()44 {45 return m_elements;46 }47 }4849 ArrayList.prototype.toString = function()50 {51 return this.toArray().toString();52 }5354 //定义一个SortedList类型,它继承ArrayList类型55 function SortedList()56 {57 //SortedList类型继承ArrayList58 this.base = ArrayList;59 this.base.apply(this,arguments);6061 this.sort = function()62 {63 var arr = this.toArray();64 arr.sort.apply(arr,arguments);65 }66 }6768 //构造一个ArrayList69 var a = new ArrayList(1,2,3);70 dwn(a); //1,2,371 dwn(a.size()); //3 a从Collection继承了size()方法72 dwn(a.isEmpty); //undefined 但是a没有继承到isEmpty()方法7374 dwn(a._size()); //3 可以实现多态继承7576 //构造一个SortedList77 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>
[解决办法]
没听说过对象继承一个类的,你那是给对象克隆方法的吧?
Object.extend= function(src,ops) { var n= function() { }; src=new src(); for(var i in ops) { src[i]=ops[i]; } n.prototype=src; n.prototype.constructor=n; return n;};
[解决办法]
个人感觉JScript 不象一种真正的语言 。
更像 是一堆堆的string 。
而运行JScript 就好象 我们编写了一个应用程序。]
应用程序 去读JScript 能够理解 JScript语句 表达的意思,就按这个意思去执行。
我说的这个 应用程序 就是浏览器。
即然JS 是一堆堆 string 。
那么,JS 就无法声明类,更不可能继承类。
只有可能是 这个 应用程序 定义了一些对象,这些对象 能调用之前定义的方法。
所以 看起来好象是继承, ----其实不是,只是方法对象之间 方法调用而已
这就是我对JScript 的理解,有错,请指出! 谢谢
[解决办法]
对象怎么能继承类呢?你可以说子类对象继承父类对象的属性
按照楼主的思路可以改成这样
var MyFun = function(){};MyFun.apply = function(o, c, defaults){ if (defaults) { apply(o, defaults); } if (o && c && typeof c == 'object') { for (var p in c) { o[p] = c[p]; } } return o;};function Animal(){ // 公共变量 this.type = "我是动物"; // 特权变量 this.setName = function(name) { this.name = name; } this.getName = function() { return this.name; } this.setColor = function(color) { this.color = color; } this.getColor = function() { return this.color; } // 私有方法 function Action() { alert("我在大便,不要看!"); } // 公用方法 this.Show = function() { alert("我是" + this.name + ",我的颜色是" + this.color); }}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 myObj = MyFun.apply(newObj,new Animal());