当前位置: 代码迷 >> JavaScript >> javascript 实现继承。该如何解决
  详细解决方案

javascript 实现继承。该如何解决

热度:125   发布时间:2012-03-12 12:45:33.0
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        }
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>
 
  相关解决方案