ES6 中的类(Class)

本文详细介绍了ES6中class的用法,包括如何使用class定义构造函数和原型方法,以及get和set的用法。通过实例展示了class如何简化构造函数和原型模式,并解释了类中的this指向及继承机制。通过super关键字实现子类对父类的继承,并重写父类方法。最后,探讨了class内部的getter和setter用于属性的存取控制。
摘要由CSDN通过智能技术生成

es6 的 class

其实就是之前的构造函数和原型


// 之前的构造函数加原型

// 坐标构造函数
function Point(x, y) {
    this.x = x,
        this.y = y
}
//构造函数的原型
Point.prototype.toString = function () {
    return `{${this.x},${this.y}}`
}

//创建实例化对象
let point = new Point(1, 2)
console.log(point.toString()) //(1,2)
 // 使用es6改写
class Point {
    // 类 内部一般只写方法
    // 默认存在一个constructor方法
    constructor(x, y) {
         //constructor() 这个方法相当于之前的构造函数
        this.x = x,
            this.y = y
    }
    // 除了constructor之外,创建的方法都是公共方法,相当于之前的 原型
      toString() {
        return `{${this.x},${this.y}}`
}
}
    let point = new Point(1, 2)
    console.log(point.toString())   //(1,2)
    console.log(typeof point)   //object
    console.log(typeof constructor) //function
    console.log(typeof Point)  //function
    console.log(point.__proto__) //{constructor: ƒ, toString: ƒ}
    // 实例化对象下的__proto__ 指得就是class的prototype
    console.log(point.__proto__ === Point.prototype) //true

get和set 存值和取值

class MyClass {
    numbers=100 //相当于在构造函数内的写法简化了,不可用来传参。
    constructor() { 
        // this.numbers =100
    }
    //创建一个公共属性 prop 属性的值 使用 get 提供 函数的返回值
    // 当我对 prop属性进行修改的时候 set prop 就会触发
    get prop() {
        return 'getter'
    }
    //用了set的话,那么该属性就变成了 可检测的
    set prop(value) {
        console.log('getter:' + value)
    }
}
let myClass = new MyClass()
myClass.prop = '修改的'      //修改之后触发set prop(){}
let myClass1 = new MyClass()
console.log(myClass)
console.log(myClass1)

类里面使用到的 this 指的是 实例化对象

es6 class的继承 先 extends 类名然后 super()

   //创建一个person类
        class Person {
            //构造函数方法
            constructor(name, age) {
                //构造器中的this指的是实例对象
                this.name = name,
                    this.age = age
            }
            //一般方法
            speak() {
                //speak方法放在类的原型对象上,供实例使用
                //通过Person实例调用speak时,speak中的this就是Person实例
                console.log(`我叫${this.name},我的年龄是${this.age}`)
            }
        }
        // const f1 = new Person('吴一凡', 18)
        // const f2 = new Person('路哈', 20)
        // console.log(f1)
        // console.log(f2)
        // f1.speak()
        // f2.speak()


        //创建一个student类,继承person类
        class Student extends Person {
            //继承父类的属性 super()方法且必须写在前面
            //super方法是相当于执行 new People()并且将this指向student
            constructor(name, age, grade) {
                super(name, age)
                //student独有的
                this.grade = grade
            }
            //重写从父类继承的方法
            speak() {
                console.log(`我叫${this.name},我的年龄是${this.age},我的年级是${this.grade}`)
            }
            //自己的方法
            study() {
                console.log('我很努力')
            }
        }
        const s1 = new Student('二强', 20, '大一')
        console.log(s1);
        s1.speak()
        ```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值