JavaScript的3种继承方式

简介: JavaScript的3种继承方式

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>


控制台结果:


 

相关文章
|
2月前
|
JavaScript 前端开发
js开发:请解释原型继承和类继承的区别。
JavaScript中的原型继承和类继承用于共享对象属性和方法。原型继承通过原型链实现共享,节省内存,但不支持私有属性。
27 0
|
1月前
|
设计模式 JavaScript 前端开发
在JavaScript中,继承是一个重要的概念,它允许我们基于现有的类(或构造函数)创建新的类
【6月更文挑战第15天】JavaScript继承促进代码复用与扩展,创建类层次结构,但过深的继承链导致复杂性增加,紧密耦合增加维护成本,单继承限制灵活性,方法覆盖可能隐藏父类功能,且可能影响性能。设计时需谨慎权衡并考虑使用组合等替代方案。
35 7
|
1月前
|
JavaScript 前端开发
在 JavaScript 中,实现继承的方法有多种
【6月更文挑战第15天】JavaScript 继承常见方法包括:1) 原型链继承,利用原型查找,实例共享原型属性;2) 借用构造函数,避免共享,但方法不在原型上复用;3) 组合继承,结合两者优点,常用但有额外开销;4) ES6 的 class,语法糖,仍基于原型链,提供直观的面向对象编程。
25 7
|
26天前
|
设计模式 JavaScript 前端开发
【JavaScript】深入浅出JavaScript继承机制:解密原型、原型链与面向对象实战攻略
JavaScript的继承机制基于原型链,它定义了对象属性和方法的查找规则。每个对象都有一个原型,通过原型链,对象能访问到构造函数原型上的方法。例如`Animal.prototype`上的`speak`方法可被`Animal`实例访问。原型链的尽头是`Object.prototype`,其`[[Prototype]]`为`null`。继承方式包括原型链继承(通过`Object.create`)、构造函数继承(使用`call`或`apply`)和组合继承(结合两者)。ES6的`class`语法是语法糖,但底层仍基于原型。继承选择应根据需求,理解原型链原理对JavaScript面向对象编程至关重要
33 7
【JavaScript】深入浅出JavaScript继承机制:解密原型、原型链与面向对象实战攻略
|
27天前
|
JavaScript 前端开发
JavaScript进阶-原型链与继承
【6月更文挑战第18天】JavaScript的原型链和继承是其面向对象编程的核心。每个对象都有一个指向原型的对象链,当查找属性时会沿着此链搜索。原型链可能导致污染、效率下降及构造函数与原型混淆的问题,应谨慎扩展原生原型、保持原型结构简洁并使用`Object.create`或ES6的`class`。继承方式包括原型链、构造函数、组合继承和ES6的Class继承,需避免循环引用、方法覆盖和不当的构造函数使用。通过代码示例展示了这两种继承形式,理解并有效利用这些机制能提升代码质量。
|
1月前
|
JavaScript 前端开发
JavaScript 继承的方式和优缺点
JavaScript 继承的方式和优缺点
|
21天前
|
JavaScript 前端开发
JavaScript 中,可以使用类继承来创建子类
JavaScript 中,可以使用类继承来创建子类
12 0
|
23天前
|
JavaScript 前端开发
JS的6种继承方式
JS的6种继承方式
15 0
|
1月前
|
JavaScript 前端开发
深入解析JavaScript中的面向对象编程,包括对象的基本概念、创建对象的方法、继承机制以及面向对象编程的优势
【6月更文挑战第12天】本文探讨JavaScript中的面向对象编程,解释了对象的基本概念,如属性和方法,以及基于原型的结构。介绍了创建对象的四种方法:字面量、构造函数、Object.create()和ES6的class关键字。还阐述了继承机制,包括原型链和ES6的class继承,并强调了面向对象编程的代码复用和模块化优势。
27 0
|
2月前
|
设计模式 JavaScript 前端开发
在JavaScript中,继承是一个重要的概念
【5月更文挑战第9天】JavaScript继承有优点和缺点。优点包括代码复用、扩展性和层次结构清晰。缺点涉及深继承导致的复杂性、紧耦合、单一继承限制、隐藏父类方法以及可能的性能问题。在使用时需谨慎,并考虑其他设计模式。
25 2