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());    // 调用重写父类的方法
相关推荐
可乐鸡翅yeah_1 小时前
FFmpeg 生成 HLS 独立分片 independent‑segments 参数到底有什么用
javascript·ffmpeg·音视频·safari·m3u8
sunshine22 girl1 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
福兮说1 小时前
canvas 旋转图片的六个坑:四角被裁、Math.ceil 多出 1px 黑边、JPG 角发黑、翻转方向反了
前端·javascript·图像处理·canvas
传奇开心果编程2 小时前
【SwiftUI提高练中学】第8课 网络层架构:拦截器、重试、缓存与离线优先
学习·macos·ui·ios·swiftui
一条破秋裤2 小时前
内核驱动的意义与课程学习规划
学习
Ai-_Man3 小时前
您您这可以把Grok的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭
javascript·人工智能·ai·小程序·电脑
Bug收容所3 小时前
学习LangChain day1
学习·langchain·llm·agent
传奇开心果编程3 小时前
【现代声明式UI学与练】第7课 组件通信——父传子、子传父、跨层级通信、状态提升与 Context
学习·flutter·react native·ui·swiftui·android jetpack
liangshanbo12153 小时前
JavaScript 异步核心主线
javascript·事件循环·异步操作
传人once4 小时前
悬停旋转放大和位移效果如何写
javascript·css·动画