构造函数继承与class继承
构造函数继承
1、子类通过apply方法或者call方法把this指向父类
js代码
function Parent(name, age) {
this.name = name
this.age = age
}
Parent.prototype.init = function(){
console.log(this.name, this.age)
}
function Son(name, age) {
Parent.apply(this, [name, age]) //子类通过apply方法或者call方法把this指向父类
}
这种方法继承了父类的属性,然而并没有继承父类原型上方法
2、把父类实例对象赋值给子类原型
js代码
function Parent(name, age) {
this.name = name
this.age = age
}
Parent.prototype.init = function(){
console.log(this.name, this.age)
}
function Son(name, age) {
}
Son.prototype = new Parent() //把父类实例对象赋值给子类原型
Son.prototype.constructor = Son //严谨起见,不写也不会影响效果
这虽然继承了父类原型方法,但是却没有继承父类属性
把1、2这两者综合一下就是构造函数的组合继承了,这样就实现了继承父类的方法和属性
js代码
function Parent(name, age) {
this.name = name
this.age = age
}
Parent.prototype.init = function(){
console.log(this.name, this.age)
}
function Son(name, age) {
Parent.call(this,name,age) //子类通过apply方法或者call方法把this指向父类
}
Son.prototype = new Parent() //把父类实例对象赋值给子类原型
Son.prototype.constructor = Son //严谨起见,不写也不会影响效果
组合继承:缺点,实现继承的过程中调用了两次父类实例
class继承
1、通过extends关键字继承父类原型方法,super方法继承父类属性,
js代码
class Parent{
constructor(name,age) {
this.name = name
this.age = age
}
init(){
console.log(this.name,this.age)
}
}
class Son extends Parent{ //extends关键字继承父类原型方法
constructor(name,age) {
super(name,age) //super方法继承父类属性
}
}
new Son('张三',18).init()
构造函数继承与class继承的更多相关文章
- javascript实现继承3种方式: 原型继承、借用构造函数继承、组合继承,模拟extends方法继承
javascript中实现继承的三种方式:原型继承.借用构造函数继承.混合继承: /* js当中的继承 js中 构造函数 原型对象 实力对象的关系: 1 构造函数.prototype = 原型对象 2 ...
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
一.本文目的与说明 1. 本文目的:理清在各种继承时,构造函数.复制构造函数.赋值操作符.析构函数的执行顺序和执行内容. 2. 说明:虽然复制构造函数属于构造函数的一种,有共同的地方,但是也具有一定的 ...
- 第32节:Java中-构造函数,静态方法,继承,封装,多态,包
构造函数实例 class Cat{ // 设置私有的属性 name private String name; // 设置name的方法 public void setName(String Name) ...
- 深入浅出javascript(十二)继承——构造函数继承和组合继承
#题记: 有一水果类,抽象出属性包括:name(水果品种),price(价格),id(ID号).现有两个子类,分别为苹果,桔子,希望继承水果父类. 一.构造函数继承 构造函数继承相当把父类的属性在子类 ...
- JS原型、原型链、构造函数、实例与继承
https://cloud.tencent.com/developer/article/1408283 https://cloud.tencent.com/developer/article/1195 ...
- java中继承,子类是否继承父类的构造函数
java中继承,子类是否继承父类的构造函数 java继承中子类是不会继承父类的构造函数的,只是必须调用(隐式或者显式) 下面来看例子: public class TestExtends { publi ...
- JS继承之原型继承
许多OO语言都支持两种继承方式:接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法.如前所述,由于函数没有签名,在ECMAScript中无法实现接口继承.ECMAScript只支 ...
- Lua面向对象----类、继承、多继承、单例的实现
(本文转载)学习之用,侵权立删! 原文地址 http://blog.csdn.net/y_23k_bug/article/details/19965877?utm_source=tuicool&a ...
- C++对象模型:单继承,多继承,虚继承
什么是对象模型 有两个概念可以解释C++对象模型: 语言中直接支持面向对象程序设计的部分.对于各种支持的底层实现机制. 类中成员分类 数据成员分为静态和非静态,成员函数有静态非静态以及虚函数 clas ...
- C++ 多继承和虚继承的内存布局(转)
转自:http://www.oschina.net/translate/cpp-virtual-inheritance 警告. 本文有点技术难度,需要读者了解C++和一些汇编语言知识. 在本文中,我们 ...
随机推荐
- 深入理解JS中的对象(三):class 的工作原理
目录 序言 class 是一个特殊的函数 class 的工作原理 class 继承的原型链关系 参考 1.序言 ECMAScript 2015(ES6) 中引入的 JavaScript 类实质上是 J ...
- Python之sys.arg[]的用法解释
转载自:https://www.cnblogs.com/liangmingshen/p/8906148.html sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,所以那 ...
- React 中使用sass
npm install node-sass-chokidar --save-dev package.json添加两行: "scripts": { 2 "build-css ...
- jupyter notebook 修改前端样式
目录 jupyter notebook主题 修改css和js 最终效果 jupyter notebook主题 作者的GitHub地址:https://github.com/dunovank/jupyt ...
- Hills And Valleys 杭电多校第五场
题意:长度为n的序列,有一次翻转区间的机会,问最长不减序列 题解:如果没有翻转区间的机会,有两个做法. 一是dp[i]表示以i结尾的最长序列 dp[i]=max(dp[i],dp[j]+1) (j& ...
- springboot使用Jwt处理跨域认证问题
在前后端开发时为什么需要用户认证呢?原因是由于HTTP协定是不存储状态的,这意味着当我们透过账号密码验证一个使用者时,当下一个request请求时他就把刚刚的资料忘记了.于是我们的程序就不知道谁是谁了 ...
- RAC配置2个私网网卡使用HAIP服务
如果是在oracle 10gRAC, 私网网卡冗余保护只能使用操作系统网卡绑定方式,但是到了oracle 11g,如果担心一个私网网卡故障导致rac节点驱逐,可以使用2个私网网卡,Oracle将自动使 ...
- JavaScript实现队列结构
参考资料 一.什么是队列结构? 1.1.简介 队列(Queue),类似于栈结构,但又和栈结构不同 是一种运算受限的线性表,受限之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rea ...
- 解决linux下启动tomcat找不到jdk
在tomcat目录下 vim catalina.sh 头部加入 JAVA_HOME='/root/use/local/java/jdk/';export JAVA_HOME;
- 【Copy攻城狮日志】docker搭建jenkins拉取svn代码打包vue项目部署到nginx
↑开局一张图,故事全靠编↑ 前言 打开搜索引擎输入『Copy攻城狮』,发现最新的一条记录已经是去年的4月,意味着我又有一年时间没有再总结成长了.习惯了“温水煮青蛙”的日子,无论是经验水平还是薪资收入, ...