借用构造函数 组合继承 拷贝继承 总结继承
借用构造函数
<!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>
借用构造函数 组合继承 拷贝继承 总结继承相关推荐
- JS基础--组合继承,寄生组合式继承
以下内容总结自<JavaScript高级程序设计(第3版)> 一. 组合继承 组合继承使用原型链实现对原型属性和方法的继承,使用借用构造函数实现对实例属性的继承(引用类型的属性写在构造函数 ...
- js继承之借用构造函数继承
2018.5.27 今天本人又在查关于继承的问题,重新温习了一遍书,发现之前举的例子实际上不太清晰,故做调整. 我的上一篇文章介绍了,原型链继承模式.原型链继承虽然很强大,但是单纯的原型链模式并不能很 ...
- 【JS第28期】继承-借用构造函数
上期我们介绍了下原型链,知道了它潜在的问题,我们这期运用借用构造函数来解决上期遗留问题.回顾以下: 上期遗留问题 包含引用类型的原型属性会被所有实例共享,因此,我们如果一个实例中修改了这个原型属性,那 ...
- JS面向对象的程序设计之继承-继承的实现-借用构造函数
JS面向对象的程序设计之继承-继承的实现-借用构造函数 前言:最近在细读Javascript高级程序设计,对于我而言,中文版,书中很多地方翻译的差强人意,所以用自己所理解的,尝试解读下.如有纰漏或错误 ...
- JavaScript中实现继承的方法(深入学习原型链、盗用构造函数、组合继承、原型式继承、寄生式继承、寄生式组合继承)
一.原型链 原型链的基本思想就是通过原型继承多个引用类型的属性和方法. 构造函数.原型和实例的关系:每个构造函数都有一个原型对象,原型有一个属性指回构造函数,而实例有一个内部指针指向原型. 若原型是另 ...
- JS中对象的四种继承方式:class继承、原型链继承、构造函数继承、组合继承(构造函数和原型链继承的结合)
前言 才发现之前没有对JavaScript中的继承做过总结,不过看得到是不少,接下来就对这几种继承方式做一下总结. class继承 class继承是ES6引入的标准的继承方式. ES6引入了class ...
- js_组合继承(最常用的继承方式)
<script type="text/javascript">//组合继承: 将原型链和借用构造函数的技术组合在一起//使用原型链实现对原型方法的继承//使用构造函数实 ...
- 详细解析JavaScript中的继承(包括组合继承和寄生式继承)
继承:相信很多学习过Java等面向对象语言的同学,都会接触过继承,它们实现继承的主要方式是接口继承和实现继承.但由于JavaScript函数没有签名,所以无法实现接口继承.ECMAScript支持实现 ...
- python的继承用法_python之继承中组合用法与菱形继承关系查找法
1.什么是组合 组合就是一个类的对象具备某一属性,该属性的值是指向另外外一个类的对象 2.为什么用组合 组合也是用来解决类与类之间代码冗余问题 3.用法 class Course: ...
最新文章
- 你不可不知的家庭装修禁忌
- hypercall的实现机制
- 对python里的装饰器
- C语言学习之从键盘输入任意一个字母,输出它的对应大(小)写
- 2017.9.22 middle 失败总结
- https://sysdig.com/
- android 梯形按钮_PLC编程入门梯形图实例讲解
- MongoDB导出-导入-迁移
- Java设计模式之四 ----- 适配器模式和桥接模式
- NUMA架构下的CPU拓扑
- Ubuntu 16.04下安装激活pycharm 2018.3版本
- 【交通标志识别】基于matlab GUI SIFT交通标志识别【含Matlab源码 864期】
- Java中银行转账的一些问题
- 把人工智能体验做到极致,微软深挖人工情感的商机
- 在IT呆了好久了,给大家科普下这个行业的行话
- 计算机酷睿处理器排行,2018电脑英特尔处理器排名(cpu性能天梯图)
- 任建新照常去办公室领取工资
- steam 无法连接远程计算机,steam联机连不上 steam联不上网
- JUC(十)-线程池-ThreadPoolExecutor分析
- 国际化之使用ResourceBundle.getBundle详解