JavaScript的继承方式有多种,这里列举3种,分别是原型继承、类继承以及混合继承。

1、原型继承

优点:既继承了父类的模板,又继承了父类的原型对象;

缺点:不是子类实例传参,而是需要通过父类实例,不符合常规。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>javascript的3种继承方式</title>
</head>
<body>
<script type="text/javascript">
//1、原型继承
//父类(水果)
function Fruit(name, price) {
this.name = name;
this.price = price;
}
//父类的原型对象属性
Fruit.prototype.id = 2018; //子类(苹果)
function Apple(color) {
this.color = color;
}
//继承实现
Apple.prototype = new Fruit('apple', 15);
var apple = new Apple('red');
console.log(apple.name);
console.log(apple.price);
console.log(apple.color);
console.log(apple.id); </script>
</body>
</html>

控制台结果:

2、类继承(运用构造函数的方式继承)

优点:继承了父类的模板并且能通过子类实例传参;

缺点:不能继承父类的原型对象。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>javascript的3种继承方式</title>
</head>
<body>
<script type="text/javascript">
//2、类继承(使用构造函数的方式继承)
//父类(水果)
function Fruit(name, price) {
this.name = name;
this.price = price;
}
//父类的原型对象属性
Fruit.prototype.id = 99; //子类(苹果)
function Apple(name, price, color) {
Fruit.call(this, name, price);//调用call或apply方法实现继承
this.color = color;
} var apple = new Apple('apple', 12, 'red');
console.log(apple.name);
console.log(apple.price);
console.log(apple.color);
console.log(apple.id); </script>
</body>
</html>

控制台结果:

3、混合继承(原型继承+类继承)

优点:既继承了父类的模板,又继承了父类的原型对象,还能实现子类实例的传参。

缺点:Apple.prototype = new Fruit();这步又实例化了一次,当多次调用比较占用资源,影响性能。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>javascript的3种继承方式</title>
</head>
<body>
<script type="text/javascript">
//3、组合继承
//父类(苹果)
function Fruit(name, price) {
this.name = name;
this.price = price;
}
//父类的原型对象属性
Fruit.prototype.id = 98; //子类(苹果)
function Apple(name, price, color) {
Fruit.call(this, name, price);//调用call或apply方法实现继承
this.color = color;
}
//原型继承
Apple.prototype = new Fruit();
var apple = new Apple('apple', 12, 'red');
console.log(apple.name);
console.log(apple.price);
console.log(apple.color);
console.log(apple.id); </script>
</body>
</html>

控制台结果:

JavaScript的3种继承方式的更多相关文章

  1. Javascript的四种继承方式

    在Javascript中,所有开发者定义的类都可以作为基类,但出于安全性考虑,本地类和宿主类不能作为基类,这样可以防止公用访问编译过的浏览器级的代码,因为这些代码可以被用于恶意攻击. 选定基类后,就可 ...

  2. 都0202年了,你还不知道javascript有几种继承方式?

    前言     当面试官问你:你了解js哪些继承方式?es6的class继承是如何实现的?你心中有很清晰的答案吗?如果没有的话,可以通过阅读本文,帮助你更深刻地理解js的所有继承方式.       js ...

  3. JavaScript的几种继承方式

    看<JavaScript高级程序设计>做的一些笔记 ECMAScript只支持实现继承,不支持接口继承(因为函数没有签名) 原型链(实现继承的主要方法): function SuperTy ...

  4. JavaScript之四种继承方式讲解

    在Javascript中,所有开发者定义的类都可以作为基类,但出于安全性考虑,本地类和宿主类不能作为基类,这样可以防止公用访问编译过的浏览器级的代码,因为这些代码可以被用于恶意攻击. 选定基类后,就可 ...

  5. JavaScript几种继承方式

    我们先构建一个Person的构造函数 function Person(name) { this.name=name; } Person.prototype.sayHi=function () { co ...

  6. 重新理解JS的6种继承方式

    写在前面 一直不喜欢JS的OOP,在学习阶段好像也用不到,总觉得JS的OOP不伦不类的,可能是因为先接触了Java,所以对JS的OO部分有些抵触. 偏见归偏见,既然面试官问到了JS的OOP,那么说明这 ...

  7. JavaScript的7种继承模式

    <JavaScript模式>一书中,对于JavaScript的几种继承模式讲解得很清楚,给我提供了很大帮助.总结一下,有如下7种模式. 继承模式1--设置原型(默认模式) 实现方式: // ...

  8. JavaScript 常见的六种继承方式

    JavaScript 常见的六种继承方式 前言 面向对象编程很重要的一个方面,就是对象的继承.A 对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法.这对于代码的复用是非常有用的. 大部分 ...

  9. js的6种继承方式

    重新理解js的6种继承方式 注:本文引用于http://www.cnblogs.com/ayqy/p/4471638.html 重点看第三点 组合继承(最常用) 写在前面 一直不喜欢JS的OOP,在学 ...

随机推荐

  1. POJ2779 线性DP 或 杨氏三角 和 钩子公式

    POJ2779 线性DP 或 杨氏三角 和 钩子公式 本来就想回顾一下基础的线性DP谁知道今早碰到的都是这种大难题,QQQQ,不会 这个也没有去理解线性DP的解法,了解了杨氏三角和钩子公式,做出了PO ...

  2. 水池问题的lua语言算法(面试题分析:我的Twitter技术面试失败了)

    twitter面试题内容 “看下面这个图片” “在这个图片里我们有不同高度的墙.这个图片由一个整数数组所代表,数组中每个数是墙的高度.上边的图可以表示为数组[2,5,1,2,3,4,7,7,6]” “ ...

  3. iOS笔记之UIKit_UITextField

    - (void)viewDidLoad { [super viewDidLoad]; //建立在你已经遵守了<协议UITextFieldDelegate> self.numTF.deleg ...

  4. 雪花算法(snowflake)delphi版

    雪花算法简单描述: + 最高位是符号位,始终为0,不可用. + 41位的时间序列,精确到毫秒级,41位的长度可以使用69年.时间位还有一个很重要的作用是可以根据时间进行排序. + 10位的机器标识,1 ...

  5. 获取用户真实ip

    public static string GetRealIP() { string result = System.Web.HttpContext.Current.Request.Headers[&q ...

  6. DataFrame 操作

    # 删除td数据框中的 指定列 td.drop(columns=['ship-city'],axis=1,inplace=True) #删除指定列 并且修改掉原始数据 # 删除td数据框中的 最后一列 ...

  7. 201621123018《Java程序设计》第6周学习报告

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 2. 书面作业 1. clone方法 1.1 在 ...

  8. springboot2 生产部署注意事项【持续更新】

    注意事项1. 去除不需要的 jar 开发工具 jar :springs-boot-devtools2. 监控一定要做好权限制或者去除 控制 jar :spring-boot-starter-actua ...

  9. ajax post 请求发送 json 字符串

    $.ajax({ // 请求方式 type:"post", // contentType contentType:"application/json", // ...

  10. spring IOC理解

    用spring做了几个项目后发现,对spring的IOC理解还是不够清晰,今天就来总结下自己的理解(个人的一些见解) 以前用jsp+servlet做网站时,只是分了显示层(jsp),控制层(servl ...