ES学习class类用法(十一)

这里写目录标题

一、class 类的用法

JS语言中,生成实例对象的传统方法是通过构造函数:

js 复制代码
        function Person(name,age){
            this.name=name;
            this.age=age;
        }
        Person.prototype.sayName=function(){
            return this.name
        }
        let p=new Person('小马哥',18);
        console.log(p);//Person {name: '小马哥', age: 18}

ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。

基本上,ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。上面的代码用 ES6 的class改写,就是下面这样

js 复制代码
        class Person{
            // constructor方法 是类的默认方法,通过new命令生成对象实例时,自动调用该方法,一个类必须有constructor方法,如果没有定义,会被默认添加
            constructor(name, age) {
                this.name = name;
                this.age = age;
            }
            //等同于Person.prototype = function sayName(){}
            sayName(){
                return this.name;
            }
        }
        console.log(new Person('小马哥',18));

类的方法内部如果含有this,它默认指向类的实例.

二、类的继承

js 复制代码
        class Animal{
            // 实例化的时候会立即被调用
            constructor(name, age){
                this.name = name;
                this.age = age;
            }
            setName(){
                return this.name;
            }
            setAge(){
                return this.age;
            }
        }

        class Dog extends Animal{
            constructor(name, age, color){
                // 如果 子类 继承了 父类,且 子类 中写了构造器,则 子类 构造器的 super 必须要调用
                super(name, age);  // 等同于 Animal.call(this,name,age); 继承父类的属性
                this.color = color;
            }
            // 子类自己的方法
            setColor(){
                return `${this.name}是${this.age}岁了,它的颜色是${this.color}`;
            }
            // 重写父类的方法
            setName(){
                // super 相同于 Animal
                return this.name + super.setAge() + this.color;
            }
        }

        let d1 = new Dog('小黄', 28, 'red');
        console.log(d1.setAge());     // 调用继承父类的方法
        console.log(d1.setColor());   // 调用子类自己的方法
        console.log(d1.setName());    // 调用重写父类的方法
相关推荐
秋雨凉人心3 小时前
简单发布一个npm包
前端·javascript·webpack·npm·node.js
B1nna4 小时前
Redis学习(三)缓存
redis·学习·缓存
_im.m.z4 小时前
【设计模式学习笔记】1. 设计模式概述
笔记·学习·设计模式
哥谭居民00015 小时前
将一个组件的propName属性与父组件中的variable变量进行双向绑定的vue3(组件传值)
javascript·vue.js·typescript·npm·node.js·css3
踢足球的,程序猿6 小时前
Android native+html5的混合开发
javascript
前端没钱6 小时前
探索 ES6 基础:开启 JavaScript 新篇章
前端·javascript·es6
左漫在成长7 小时前
王佩丰24节Excel学习笔记——第十九讲:Indirect函数
笔记·学习·excel
一条不想当淡水鱼的咸鱼7 小时前
taro中实现带有途径点的路径规划
javascript·react.js·taro
土豆炒马铃薯。7 小时前
【Vue】前端使用node.js对数据库直接进行CRUD操作
前端·javascript·vue.js·node.js·html5
纪伊路上盛名在8 小时前
Max AI prompt1
笔记·学习·学习方法