构造函数的封装请移步 http://www.cnblogs.com/JDDDD/p/5392231.html

对象之间继承一共有五种方法

比如现在有一个Person的构造函数,有两个属性name和sex,有两个方法showName()和showSex()

 1         function Person(name , sex) {
 2             this.name = name;
 3             this.sex = sex;
 4         }
 5         Person.prototype.showName = function () {
 6             alert(this.name);
 7         };
 8         Person.prototype.showSex = function () {
 9             alert(this.sex);
10         };

现在又有一个Worker的构造函数,有一个属性

1         function Worker(name , sex , job) {
2
3             //this--->new出来的worker对象
4             this.job = job;
5         }

现在需要让Worker去继承Person

方法一 构造函数绑定

使用call或者apply方法(可以将一个对象替换成当前对象,这边即将Person对象替换成当前的Worker对象),将父对象的构造函数绑定在子对象上

 1  //------>工人的继承
 2         function Worker(name , sex , job) {
 3            // Person.apply(this ,[name,sex]);
 4             Person.call(this,name,sex);
 5             this.job = job;
 6         }
 7      
 8         var oW = new Worker('jiang','male','boss');
 9         alert(oW.name);
10         oW.showName();    

这时我们会发现第一个alert是可以输出的,而第二个oW.showName()却无法调用 , 控制台会提示oW.showName() is not a function 这是因为我们没有复制父级的原型 改进如下

 1        //------>工人的继承
 2         function Worker(name , sex , job) {
 3             Person.apply(this ,[name,sex]);
 4             this.job = job;
 5         }
 6
 7         for(var i in Person.prototype){
 8             Worker.prototype[i] = Person.prototype[i];
 9         }
10
11         var oW = new Worker('jiang','male','boss');
12         alert(oW.name);
13         oW.showName();

这时oW.showName()就可以输出内容 jiang,当然这边不能直接使用Worker.prototype = Person.prototype 因为这样的话子对象的prototype的改变将会影响到父级的prototype, 这个关系到引用的问题 , 这里不作展开 ,具体请看。

转载于:https://www.cnblogs.com/JDDDD/p/5395222.html

JS面向对象(二)——构造函数的继承相关推荐

  1. JS面向对象的程序设计之继承-继承的实现-借用构造函数

    JS面向对象的程序设计之继承-继承的实现-借用构造函数 前言:最近在细读Javascript高级程序设计,对于我而言,中文版,书中很多地方翻译的差强人意,所以用自己所理解的,尝试解读下.如有纰漏或错误 ...

  2. js面向对象的程序设计 --- 下篇 继承启蒙

    继承是oo语言中一个最为人津津乐道的概念.ECMAScript支持实现继承,而且实现继承只要是靠原型链来实现的 ·原型链 其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法. 简单回顾一 ...

  3. JS面向对象,创建,继承

    很开心,最近收获了很多知识,而且发现很多东西,以前理解的都是错的,或者是肤浅的,还以为自己真的就get到了精髓,也很抱歉会影响一些人往错误的道路上走,不过这也告诉了我们,看任何一篇文章都不能盲目的去相 ...

  4. js面向对象之封装,继承,多态,类的详解

    封装 在面向对象的操作中,我们有完全不同的一些写法. 想要封装我们的对象,就要用到构造函数.我们需要创建构造函数,构造函数和函数一致,都是通过function创建的 首字母大写(规范,为了和普通函数进 ...

  5. Python 面向对象(二)类的继承

    class people:#定义基本属性name = ''age = 0#定义私有属性,私有属性在类外部无法直接进行访问__weight = 0#定义构造方法def __init__(self,n,a ...

  6. JS 面向对象编程、原型链、原型继承(个人学习总结)

    一.面向对象 1. 面向对象 是所有语言 都有的一种编程思想,组织代码的一种形式 基于对象的语言:JS语言 面向对象的语言:c++ java c# 2. 面向对象 3大特征 封装:将重用代码封装到函数 ...

  7. Canvas星空效果(JS面向对象)

    概述 更多Canvas实例可以看GitHub,不定时更新:https://github.com/xiangshuo1992/canvas-demo 这个Demo主要有以下几点可以讨论: 1.HTML5 ...

  8. (二)Javascript面向对象编程:构造函数的继承

    Javascript面向对象编程:构造函数的继承 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承&q ...

  9. Javascript面向对象编程(二) 构造函数的继承

    标注:(转载自:http://www.jb51.net/article/28128.htm) 今天要介绍的是,如何生成一个"继承"多个对象的实例.  比如,现在有一个"动 ...

最新文章

  1. ORA-12519, ORA-00020异常产生原因及解决方案
  2. linux elf格式 全局指针表got call跳转表plt 简介
  3. 问题集锦(48-51)
  4. 卸载 nvidia 显卡驱动
  5. 啥是PID?PID可以吃吗?
  6. tcp前4字节消息长度_网络基础篇之TCP
  7. JAVA中的适配器应用_Java适配器模式详解和实际应用.md
  8. springboot使用thymeleaf模板引擎时出现org.xml.sax.SAXParseException的原因与解决办法
  9. python自动化运维工程师面试题_运维面试题(含答案)
  10. PAIP.MYSQL数据库比较VC313.TXT
  11. 账务实时交易系统设计思考
  12. 三子棋 小游戏 C++
  13. 『IT视界』 [互联网]联想裁员千人不影响国内业务 每年节约2.5亿
  14. 近期工作心得(总结篇)
  15. vue实现时间段选择组件,分星期,最小粒度半点
  16. 机器学习样本数据集,训练正负样本
  17. ant 中文手册--下载安装
  18. 条款11:在operator=中处理“自我赋值”
  19. Linux 命令介绍
  20. 语法3:for - 循环结构

热门文章

  1. 牛客小白月赛12 J 月月查华华的手机 (序列自动机模板题)
  2. Jam's balance HDU - 5616 (01背包基础题)
  3. 组件Refs(操作DOM的2⃣️两种方法)
  4. mysqlbinlog查看 binlog日志报错mysqlbinlog: unknown variable 'default-character-set=utf8mb4'
  5. 继BAT之后 第四大巨头是谁
  6. 深入理解JDBC的超时设置 转
  7. C#接口中为什么不能像java那样使用static?
  8. docker安装测试及问题解决
  9. 树莓派3B+运行arm_computer_library
  10. QQProtect.exe(Q盾)