javascript代码实例教程-JS中通过call方法实现继承

发布时间:2019-01-28 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-JS中通过call方法实现继承脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。 讲解都写在注释里面了,有不对的地方请拍砖,谢谢!

 

 

 

复制代码

<htML XMlns="https://www.w3.org/1999/xhtml">

<head>

    <tITle>JS通过call方法实现继承</title>

</head>

<body>

    <script tyPE="text/javascript">

 

        /*  js中的继承有多种实现方式,今天我们讨论下通过call方法实现的继承。

        

        此方法与 原型链继承 相比还是比较简单,容易理解的。

 

        那么,我们先对call方法进行简单的讲解:

 

        call 方法可以用一个对象来代替另一个对象调用一个方法。

 

        这句话蛮不好理解,

 

        还是看示例代码吧,更直观明了:

 

        */

 

        function a() {

            this.name = "我是a";

 

            this.showName = function () {

                alert(this.name);

            }

        }

 

        function b() {

            this.name = "我是b";

        }

 

        VAR _a = new a();

        var _b = new b();

 

        //下面这行代码的意思是:用 _b 来代替 _a 执行 _a 的showName方法。

        //因此执行对象从 _a 变成了 _b, showName方法里面的this此时指代的是 b 了,而不是 a

        //因此输出结果为: 我是b

        _a.showName.call(_b);

 

        /*

        哎,语文没学好,总感觉表达不清楚,也不知道大家能不能看懂。

        好了,进入正题,我们来看继承的实现。

        */

 

 

        /*

        首先我们要定义4个类:动物(animal) ; 人(person) ; 中国人(chinese) ; 日本人(japanese)。

 

        代码如下:

        */

 

        function animal() {

            this.eat = function () {

                alert("动物都要东西");

            }

        }

 

        function person() {

            this.say = function () {

                alert("人是会说话的");

            }

        }

 

//        function chinese() {

//            this.ch = function () {

//                alert("我是中国人");

//            }

//        }

 

//        function japanese() {

//            this.ja = function () {

//                alert("我是日本人");

//            }

//        }

 

 

        /*  然后实现4个类之间的关系

            

            关系如下: 中国人 继承自 人

 

                      日本人 继承自 动物 和 人

 

            说明: 

            

            在JS中是可以实现类的多继承的。

            因此 japanese 可以同时继承自 animal 和 person ,

            它不像C#和java语言,只支持接口的多继承,而不支持类的多继承。

            

 

            修改上面的chinese和japanese如下:

        

        */

 

 

        function chinese() {

            person.call(this); //继承自 person 类 (用chinese来代替person)

 

            this.ch = function () {

                alert("我是中国人");

            }

        }

 

 

        function japanese() {

            animal.call(this); //继承自 animal 类

            person.call(this); //继承自 person 类

 

            this.ja = function () {

                alert("我是日本人");

            }

        }

 

 

        /*

            我们知道:实现继承后,子类是可以拥有父类的公有字段和方法的。

            而父类不会拥有子类的任何东西

 

            说明:

            js中的 字段,方法 也是有公有和私有之分的。

            子类只能访问到父类的公有字段和方法。           

            关于 js 中的 公有,私有,全局,静态 等等的定义讲解我会另写一篇博文

            与大家讨论。

 

            请看如下代码:

        */

 

        //实例化对象

        var c = new chinese();

        var j = new japanese();

        var p = new person();

 

        c.say(); //拥有父类 person 的 say 方法

        c.ch();  //自身的 ch 方法

 

        j.eat();  //拥有父类 animal 的 eat 方法

        j.say();  //拥有父类 person 的 say 方法

        j.ja();   //自身的 ja 方法

 

        p.say();  //自身的 say 方法

 

        /*

            下面两句会报错,

            因为父类person是不会拥有子类的任何东西的,

            所以p没有ch和ja方法。

 

            p.ch();

            p.ja();

        */

 

    </script>

</body>

</html>

觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的javascript代码实例教程-JS中通过call方法实现继承全部内容,希望文章能够帮你解决javascript代码实例教程-JS中通过call方法实现继承所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。