JavaScript--面向对象原型继承

Posted Z && Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript--面向对象原型继承相关的知识,希望对你有一定的参考价值。

1. 面向对象原型继承


面向对象编程

javascript的面向对象编程和大多数其他语言如Java、C#的面向对象编程都不太一样。如果你熟悉Java或C#,很好,你一定明白面向对象的两个基本概念:
在这里插入图片描述
所以,类和实例是大多数面向对象编程语言的基本概念。

在JavaScript中,这个概念需要改一改。JavaScript不区分类和实例的概念,而是通过原型(prototype)来实现面向对象编程。

原型是指当我们想要创建 xiaoming 这个具体的学生时,我们并没有一个 Student 类型
可用。那怎么办?恰好有这么一个现成的对象:
    let robot = {
        name: 'Robot',
        height: 1.6,
        run: function () {
            console.log(this.name + ' is running...');
        }
    };

在这里插入图片描述

    let Student = {
        name: 'Robot',
        height: 1.2,
        run: function () {
            console.log(this.name + ' is running...');
        }
    };

    let xiaoming = {name: '小明'};
    xiaoming.__proto__ = Student;
    xiaoming.run();// 小明 is running...

在这里插入图片描述
JavaScript的原型链和Java的Class区别就在,它没有“Class”的概念,所有对象都是实例,所谓继承关系不过是把一个对象的原型指向另一个对象而已。

如果你把 xiaoming 的原型指向其他对象:

    let Bird = {
        fly: function () {
            console.log(this.name + ' is flying...');
        }
    };
    let xiaoming = {name: '小明'};
    xiaoming.__proto__ = Bird;
    xiaoming.fly();// 小明 is flying...

在这里插入图片描述

在JavaScrip代码运行时期,你可以把 xiaoming 从 Student 变成 Bird ,或者变成任何对象。

    let Student = {
        name: 'Robot',
        height: 1.2,
        run: function () {
            console.log(this.name + ' is running...');
        }
    };

    let xiaoming = {name: '小明'};
    xiaoming.__proto__ = Student;
    xiaoming.run();// 小明 is running...
    
    let Bird = {
        fly: function () {
            console.log(this.name + ' is flying...');
        }
    };
    xiaoming.__proto__ = Bird;
    xiaoming.fly();// 小明 is flying...

在这里插入图片描述



以上是关于JavaScript--面向对象原型继承的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript之面向对象学九(原型式继承和寄生式继承)

JavaScript面向对象编程(原型类基础)

JavaScript--面向对象原型继承

JavaScript面向对象

js面向对象编程/原型链/继承 —— javascript

JavaScript——面向对象原型继承与class继承