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. docker mac

    官网上有安装方法.已安装成功. 容器千万不能随便删 现在已经不用boot2docker,使用dockertools来安装docker,dockertools中包含docker-machine,等等. ...

  2. SRM466

    250pt: 给出一个数n(n <= 10^10),问至少修改几位能使其变成完全平方数. 思路:     直接枚举平方根,然后统计.     注意枚举时要枚举到比她大.. #line 7 &qu ...

  3. 微赞微擎V0.8以上版本:【数据库读写分离】实战教程 [复制链接]

    http://www.efwww.com/forum.php?mod=viewthread&tid=4870 马上注册,下载更多源码,让你轻松玩转微信公众平台. 您需要 登录 才可以下载或查看 ...

  4. node.js second day

    create global link 使用全局模式安装的包不能直接通过require使用,但是nmp提供了一个 nmp link ,这个可以打破限制 $ nmp link [express] ./no ...

  5. 利用gotty在web浏览器模拟终端登录

    1.随机url,9000端口访问 gotty -p " -r -w bash -i 2.简单用户名密码授权,9090端口访问 gotty -p -c user:password -w bas ...

  6. golang简单实现jwt验证(beego、xorm、jwt)

    程序目录结构 简单实现,用户登录后返回一个jwt的token,下次请求带上token请求用户信息接口并返回信息. app.conf文件内容(可以用个beego直接读取里面的内容)写的是一个jwt的se ...

  7. C# winfrom 写的一个搜索助手,可以按照标题和内容搜索,支持doc,xls,ppt,pdf,txt等格式的文件搜索

    C# winfrom 写的一个搜索助手,可以按照标题和内容搜索,指定目录后,遍历搜索文件和子目,现在只写了支持.DOC.DOCX.XLS.XLSX.PPT.PPTX.PDF.HTML.HTM.TXT等 ...

  8. 自定义WPF窗体形状

    介绍 你好WPF爱好者. 随着WPF等统一API语言的发明,丰富用户界面变得非常容易. 创建丰富的用户界面只是一个想法. 您需要拥有的是创造性思维和最新技术融合. WPF和Expression Ble ...

  9. jQuery中FormData的使用

    web中数据提交事件是常常发生的,但是大多数情况下我们不希望使用html中的form表单提交,因为form表单提交会中断当前浏览器的操作并且会调到另一个地址(即使这个地址是当前页面),并且会重复加载一 ...

  10. git add .添加不成功

    情景: 我首先在一个有许多文件的文件夹中  git init  创建一个git管理仓库 之后 git add . 之后 git commit -m "提交" 发现提交不成功,文件没 ...