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>


控制台结果:


 

相关文章
|
1月前
|
JavaScript 前端开发
JavaScript 继承的方式和优缺点
JavaScript 继承的方式和优缺点
13 0
|
JavaScript 前端开发 Java
深入JS面向对象(原型-继承)(三)
深入JS面向对象(原型-继承)
31 0
|
JavaScript 前端开发 Java
深入JS面向对象(原型-继承)(一)
深入JS面向对象(原型-继承)
32 0
|
2月前
|
JavaScript 前端开发
js开发:请解释原型继承和类继承的区别。
JavaScript中的原型继承和类继承用于共享对象属性和方法。原型继承利用原型链查找属性,节省内存但不支持私有成员。类继承通过ES6的class和extends实现,支持私有成员但占用更多内存。两者各有优势,适用于不同场景。
22 0
|
4月前
|
JavaScript
|
4月前
|
JavaScript 前端开发
原型继承在 JavaScript 中是如何工作
原型继承在 JavaScript 中是如何工作
21 0
|
3天前
|
JavaScript 前端开发
JavaScript 中最常用的继承方式
JavaScript中的继承有多种实现方式:1) 原型链继承利用原型查找,但属性共享可能引发问题;2) 借用构造函数避免共享,但方法复用不佳;3) 组合继承结合两者优点,是最常用的方式;4) ES6的class继承,是语法糖,仍基于原型链,提供更直观的面向对象编程体验。
8 1
|
3天前
|
设计模式 JavaScript 前端开发
在JavaScript中,继承是一个重要的概念
JavaScript继承有优点和缺点。优点包括代码复用、扩展性和层次结构清晰。缺点涉及深继承导致的复杂性、紧耦合、单一继承限制、隐藏父类方法以及可能的性能问题。在使用时需谨慎,并考虑其他设计模式。
8 2
|
4天前
|
JavaScript 前端开发 开发者
JavaScript 继承的方式和优缺点
JavaScript 继承的方式和优缺点
9 0
|
13天前
|
JavaScript 前端开发
JavaScript 继承的方式和优缺点
JavaScript 继承的方式和优缺点