借用构造函数

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><script>// function Person(name,age,sex,weight){//     this.name = name;//     this.age = age;//     this.sex = sex;//     this.weight = weight;// }// Person.prototype.sayHi = function(){//     console.log("您好");// };// function Student(score){//     this.score = score;// }// // 希望人的类别中的数据可以共享给学生----继承// Student.prototype = new Person("小明",10,"男","50kg");// var stu1 = new Student(100);// console.log(stu1.name,stu1.age,stu1.sex,stu1.weight,stu1.score);// stu1.sayHi();// var stu2 = new Student(120);// stu2.name = "张三";// stu2.age = 20;// stu2.sex = "女";// console.log(stu2.name,stu2.age,stu2.sex,stu2.weight,stu2.score);// stu2.sayHi();// var stu4 = new Student(150);// console.log(stu4.name,stu4.age,stu4.sex,stu4.weight,stu4.score);// stu4.sayHi();// 为了数据共享,改变原型指向,做到了继承----通过改变原型指向是实现的继承// 缺陷:因为改变原型指向的同时实现继承,直接初始化了属性,// 继承过来的属性的值都是一样的,所以,这就是问题// 只能重新调用对象的属性进行重新赋值// 解决方案:继承的时候,不用改变原型的指向,直接调用父级的构造函数的方式来// 为属性赋值就可以了----借用构造函数:把要继承的父级的构造函数拿过来,使用// 一下就可以了// 借用构造函数:构造函数名字.call(当前对象,属性,属性,.....)// 解决了属性继承,并且值不重复的问题// 缺陷:父级类别中的方法不能继承function Person(name,age,sex,weight){this.name = name;this.age = age;this.sex = sex;this.weight = weight;}Person.prototype.sayHi = function(){console.log("您好");};function Student(name,age,sex,weight,score){Person.call(this,name,age,sex,weight);this.score = score;}var stu1 = new Student("小明",10,"男","10kg",100);console.log(stu1.name,stu1.age,stu1.sex,stu1.weight,stu1.score);var stu2 = new Student("小红",20,"女","40kg",120);console.log(stu2.name,stu2.age,stu2.sex,stu2.weight,stu2.score);var stu4 = new Student("小丽",50,"男","80kg",150);console.log(stu4.name,stu4.age,stu4.sex,stu4.weight,stu4.score);</script>
</head>
<body></body>
</html>

组合继承

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><script>// 原型实现继承// 借用构造函数实现继承// 组合继承:原型继承+借用构造函数继承function Person(name,age,sex){this.name = name;this.age = age;this.sex = sex;}Person.prototype.sayHi = function(){console.log("hello");};function Student(name,age,sex,score){// 借用构造函数:属性值重复的问题Person.call(this,name,age,sex);this.score = score;}// 不传值// 改变原型指向----继承Student.prototype = new Person();Student.prototype.eat = function(){console.log("吃东西");};var stu = new Student("小黑",20,"男","100分");console.log(stu.name,stu.age,stu.sex,stu.score);stu.sayHi();stu.eat();// 属性和方法都被继承了var stu2 = new Student("小白",20,"女","100分");console.log(stu2.name,stu2.age,stu2.sex,stu2.score);stu2.sayHi();stu2.eat();</script>
</head>
<body></body>
</html>

拷贝继承

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><script>// 拷贝继承:把一个对象中的属性和方法直接复制到另一个对象中// var obj1 = {//     name:"小糊涂",//     age:20,//     sleep:function(){//       console.log("睡觉了");//     }// };// 改变了地址的指向// var obj2 = obj1;// console.log(obj2.name,obj2.age);// obj2.sleep();// 拷贝继承:把一个对象中的属性和方法直接复制到另一个对象中// var obj1 = {//     name:"小糊涂",//     age:20,//     sleep:function(){//       console.log("睡觉了");//     }// };// // 改变了地址的指向// var obj2 = {};// for(var key in obj1){//     // obj2.name = obj1.name;//     obj2[key] = obj1[key];// }// console.log(obj2.namefunction Person(){}Person.prototype.age = 10;Person.prototype.sex = "男";Person.prototype.height = 100;Person.prototype.play = function(){console.log("玩的好开心");};var obj2 = {};// Person的构造中有原型prototype,prototype就是一个对象,那么里面的age,sex// height,play都是该对象中的属性和方法for(var key in Person.prototype){obj2[key] = Person.prototype[key];}console.dir(obj2);obj2.play();</script>
</head>
<body></body>
</html>

总结继承

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><script>// 面向对象特性:封装,继承,多态// 继承,类与类之间的关系,面向对象的语言的继承是为了多态服务的// js不是面向对象的语言,但是可以模拟面向对象.模拟继承.为了节省内存空间// 继承:/*** 原型作用:为了节省内存空间,数据空间,目的是为了节省空间* 原型作用:继承 目的是:节省内存空间* * 原型继承:改变原型指向* 借用构造函数继承:主要解决属性的问题* 组合继承:原型继承+借用构造函数继承* 既能解决属性问题,又能解决方法问题* 拷贝继承:就是把对象中需要共享的属性或者方法,直接遍历的方式复制到另一个* 对象中* * */</script>
</head>
<body></body>
</html>

借用构造函数 组合继承 拷贝继承 总结继承相关推荐

  1. JS基础--组合继承,寄生组合式继承

    以下内容总结自<JavaScript高级程序设计(第3版)> 一. 组合继承 组合继承使用原型链实现对原型属性和方法的继承,使用借用构造函数实现对实例属性的继承(引用类型的属性写在构造函数 ...

  2. js继承之借用构造函数继承

    2018.5.27 今天本人又在查关于继承的问题,重新温习了一遍书,发现之前举的例子实际上不太清晰,故做调整. 我的上一篇文章介绍了,原型链继承模式.原型链继承虽然很强大,但是单纯的原型链模式并不能很 ...

  3. 【JS第28期】继承-借用构造函数

    上期我们介绍了下原型链,知道了它潜在的问题,我们这期运用借用构造函数来解决上期遗留问题.回顾以下: 上期遗留问题 包含引用类型的原型属性会被所有实例共享,因此,我们如果一个实例中修改了这个原型属性,那 ...

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

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

  5. JavaScript中实现继承的方法(深入学习原型链、盗用构造函数、组合继承、原型式继承、寄生式继承、寄生式组合继承)

    一.原型链 原型链的基本思想就是通过原型继承多个引用类型的属性和方法. 构造函数.原型和实例的关系:每个构造函数都有一个原型对象,原型有一个属性指回构造函数,而实例有一个内部指针指向原型. 若原型是另 ...

  6. JS中对象的四种继承方式:class继承、原型链继承、构造函数继承、组合继承(构造函数和原型链继承的结合)

    前言 才发现之前没有对JavaScript中的继承做过总结,不过看得到是不少,接下来就对这几种继承方式做一下总结. class继承 class继承是ES6引入的标准的继承方式. ES6引入了class ...

  7. js_组合继承(最常用的继承方式)

    <script type="text/javascript">//组合继承: 将原型链和借用构造函数的技术组合在一起//使用原型链实现对原型方法的继承//使用构造函数实 ...

  8. 详细解析JavaScript中的继承(包括组合继承和寄生式继承)

    继承:相信很多学习过Java等面向对象语言的同学,都会接触过继承,它们实现继承的主要方式是接口继承和实现继承.但由于JavaScript函数没有签名,所以无法实现接口继承.ECMAScript支持实现 ...

  9. python的继承用法_python之继承中组合用法与菱形继承关系查找法

    1.什么是组合 组合就是一个类的对象具备某一属性,该属性的值是指向另外外一个类的对象 2.为什么用组合 组合也是用来解决类与类之间代码冗余问题 3.用法 class Course:           ...

最新文章

  1. 你不可不知的家庭装修禁忌
  2. hypercall的实现机制
  3. 对python里的装饰器
  4. C语言学习之从键盘输入任意一个字母,输出它的对应大(小)写
  5. 2017.9.22 middle 失败总结
  6. https://sysdig.com/
  7. android 梯形按钮_PLC编程入门梯形图实例讲解
  8. MongoDB导出-导入-迁移
  9. Java设计模式之四 ----- 适配器模式和桥接模式
  10. NUMA架构下的CPU拓扑
  11. Ubuntu 16.04下安装激活pycharm 2018.3版本
  12. 【交通标志识别】基于matlab GUI SIFT交通标志识别【含Matlab源码 864期】
  13. Java中银行转账的一些问题
  14. 把人工智能体验做到极致,微软深挖人工情感的商机
  15. 在IT呆了好久了,给大家科普下这个行业的行话
  16. 计算机酷睿处理器排行,2018电脑英特尔处理器排名(cpu性能天梯图)
  17. 任建新照常去办公室领取工资
  18. steam 无法连接远程计算机,steam联机连不上 steam联不上网
  19. JUC(十)-线程池-ThreadPoolExecutor分析
  20. 国际化之使用ResourceBundle.getBundle详解

热门文章

  1. 从雷军那里反思,做什么样的公司?
  2. weh shell高大上?一文教你实现
  3. rabbitmq的安装和使用
  4. python import
  5. linux新手入门必看
  6. 桌面虚拟化之运维支持
  7. Python函数中的变量和函数返回值
  8. Python socket Ftp get put 简单实现
  9. 人生只有七次机会,你抓住了几次?
  10. Ogre wiki 中级教程1 动画,点之间行走及四元数的基本应用