首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

javascript 实现继承。该如何解决

2012-03-12 
javascript 实现继承。javascript如何实现继承呢?这是我写的一个基类JScript codefunction Animal() {//私

javascript 实现继承。
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        }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> 


[解决办法]
没听说过对象继承一个类的,你那是给对象克隆方法的吧?

JScript code
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 的理解,有错,请指出! 谢谢
[解决办法]
对象怎么能继承类呢?你可以说子类对象继承父类对象的属性
按照楼主的思路可以改成这样
JScript code
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()); 

热点排行