JS中通过call方法实现继承
原文:JS中通过call方法实现继承

讲解都写在注释里面了,有不对的地方请拍砖,谢谢!

<html xmlns="http://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>

     

posted on 2014-11-02 14:47 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/4069229.html

JS中通过call方法实现继承相关推荐

  1. JS中的Replace方法

    最近查一个bug,原因是JS中的Replace方法造成的,当将一个字符串中有处需要替换时,一般会用到JS中的Replace方法,Replace方法的第一个参数如果是传的字符串,只会替换第一处.代码如下 ...

  2. java script eval_「eval」js中的eval方法详解(一)–eval方法的初级应用 - seo实验室...

    eval 在我看来,js中的eval()方法就是一个js语言的执行器,它能把其中的参数按照javaScript语法进行解析并执行. 语法: eval(s); eval()方法中的参数s有多种情况.参数 ...

  3. JS中创建对象的方法

    JS中创建对象的方法 最近手头一个项目刚完成,下一个显目还在准备中,趁这个空档期,拿起尘封多年的JS书, 重温一遍JS面向对象程序设计,然后就得出下文,算是一个总结吧. 也许,你会说 "创建 ...

  4. jquery中的map()方法与js中的map()方法

    1.jquery中的map()方法 首先看一个简单的实例: $("p").append( $("input").map(function(){ return $ ...

  5. js中的字符串方法与数组方法总结

    js中的字符串方法与数组方法总结 1.字符串方法 2.数组方法

  6. 请尽可能说出js中数组的方法,最少3个,越多越好

    我接下来要把数组方法全都过一遍,顺手做个整理. 至于为什么整理这个,最近总听说面试经常会问到这个问题, 面试官灵魂发问:请尽可能说出js中数组的方法,最少3个,越多越好 据可靠消息了解到,如果你回答的 ...

  7. slice在php里面什么意思,js中slice()使用方法

    本文主要和大家分享js中slice()使用方法,slice()通过索引位置获取新的数组,该方法不会修改原数组,只是返回一个新的子数组. 用法:arrayObj.slice(start,end)arra ...

  8. js中的slice方法(开始索引,结束索引-不包含该索引元素)-截取和splice方法-删除(开始索引,删除个数)和插入-(开始索引,删除个数,插入内容)

    js中的slice方法(开始索引,结束索引-不包含该索引元素)-截取和splice方法-删除(开始索引,删除个数)和插入-(开始索引,删除个数,插入内容) 1.slice(start,end)-截取 ...

  9. js中数组map方法的使用和实现

    js中数组map方法的使用和实现 MDN中定义 map() 方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值. 语法 var new_array = arr.map(fun ...

最新文章

  1. 解决TextView排版混乱或者自动换行的问题
  2. 160个Crackme018
  3. 电子邮件收发原理和实现(POP3, SMTP)
  4. linux echo命令
  5. Java教程01.Java简介与环境配置
  6. openwrt编译基本教程
  7. 测试方案的设计及模板
  8. Unix文件系统的层次结构
  9. 程序员试用期被裁,只给半个月赔偿
  10. 打印服务器应用设置指南,打印服务器系统配置教程(1)
  11. 鸿蒙系统充电慢,数据线充电慢怎么解决
  12. 人工智能+专业运维:企业联络中心的数字化转型
  13. Debug Error :abort() has been called 报错原因及解决方法
  14. OSG 之学习二:OSG 模型简单控制
  15. uniapp开发app真机调试连接电脑服务器请求失败解决方法
  16. jfs jfs2_故障诊断过程因JFS2 inode带有空扩展属性条目而挂起
  17. 克里斯·麦克切斯尼《高效能人士的执行4原则》读书笔记
  18. 达内 Java 全套教程 NPM、PYPI、DockerHub 备
  19. rabbitmq的安装和配置
  20. RoCE网络技术和实现方式

热门文章

  1. python动态语言双刃性_动态语言的灵活性是把双刃剑:以 Python 语言为例
  2. JAVA面试题集收藏大放送
  3. 操作系统存储器管理实验报告_献上膝盖!华为工程师抛出一份堪称“举世无双”操作系统笔记...
  4. base.dispose(disposing) 未将对象引用到实例_程序员深入理解asp.net c#值类型和引用类型...
  5. 基于matlab实现的人脸检测
  6. 用Intel跟AMD CPU烤肉,哪个更香,你们猜猜结果?
  7. 2023届IC实习小结
  8. 多态_月隐学python第18课
  9. oracle 查看任务数量,关于dbms_scheduler创建任务数量的疑问
  10. 电脑上怎么配置mysql数据库服务器_Mysql数据库服务器安装与配置详解教程