js 中的class

简介:

js 的calss
由于存在转换器这种神器,所以代码能直接转换为es5,用es6的语法写。

一些解释

js的calss仅仅为一个语法糖,是在原先构造函数的基础上出现的class,仅仅如此。所以使用构造函数构造类,或者使用class语法糖构造类都是相同的。具体还是使用prototype和this来进行模拟类。

重点在于构造函数,使用的是构造函数来模拟类。

类声明

需要声明一个类,需要使用class

class Rectangle {
    constructor(height, width) {
        this.height = height;
        this.width = width;
    }
}

和函数声明的最大的区别在于,类声明,不会出现声明提前,函数声明会出现声明提前,这是两者最大的区别。

在上方中,声明类以后,新建一个对象。

let rectAngle = new Rectangle

该对象具有constructor方法。

匿名类

和匿名函数类似,类依旧可以进行匿名声明

let Rectangle = class {
    constructor(height, width) {
        this.height = height;
        this.width = width;
    }
}

在类表达式中,同样会出现类声明提升的问题。

constructor

为一个构造函数,用于初始化class并创建一个对象

即为原先学习的构造函数,函数为对象,对象为函数。

class Rectangle {
    // 构造函数
    constructor(height, width) {
        this.height = height;
        this.width = width;
    };
    // get 方法即调用将会返回的值
    get area() {
        return this.calcArea();
    };
    // 定义calcArea函数
    calcArea() {
        return this.height * this.width;
    }
}

上方定义了一个类如果需要使用

const square = new Rectangle();
console.log(square.area);

即可完成对类的使用。

static

为一个静态方法,该静态new出的来的对象不能进行使用。

常常用于工具函数的书写

class Point {
    constructor(x, y){
        this.x = x;
        this.y = y;
    };

    static distance(a, b){
        const dx = a.x - b.x;
        const dy = a.y - b.y;
        return Math.hypot(dx, dy);    // 毕达哥拉斯定理
    }
}
// 使用
const p1 = new Point(5,5);
const p2 = new Point(10,10);
console.log(Point.distance(p1,p2));

关于严格模式

由于js存在严格模式,并且上面的内容在严格模式下执行,如果该对象没有this的值,将不会返回其本身。

传统的使用prototype将会返回其本身,因为传统的不在严格模式下执行。

extends

使用extends创建子类

class Animal {
    constructor(name) {
        this.name = name;
    }

    speak() {    // 由于是在类中定义,function关键字可以省去
        console.log(this.name);
    }
}
// 创建DOg父类
class Dog extends Animal {
    speak() {
        console.log(this.name);
    }
}

let d = new Dog();
d.name = "ming"
d.speak();

类不可继承没有构造函数的对象

如果一个对象没有构造函数,将不能进行继承。
请使用

Object.create()

进行创建给予对象的新对象


const a = {

};

const b = Object.create(a);    // 创建基于原型a的对象

super

使用super调用超类


class Cat {
    constructor(name) {
        this.name = name;
    }

    speak() {
        console.log();
    };
}  

class Lion extends Cat {
    speak() {
        super.speak();
    }
}

即使用super调用超类

目录
相关文章
|
25天前
|
JavaScript
js开发:请解释什么是ES6的类(class),并说明它与传统构造函数的区别。
ES6的类提供了一种更简洁的面向对象编程方式,对比传统的构造函数,具有更好的可读性和可维护性。类使用`class`定义,`constructor`定义构造方法,`extends`实现继承,并可直接定义静态方法。示例展示了如何创建`Person`类、`Student`子类以及它们的方法调用。
21 2
|
1月前
|
JavaScript 前端开发
js继承的超详细讲解:原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承、class继承
js继承的超详细讲解:原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承、class继承
51 0
|
2月前
|
前端开发 JavaScript
前端深入理解JavaScript面向对象编程与Class
随着JavaScript的发展,ECMAScript 6(ES6)引入了许多新的语言特性和语法糖,其中包括了面向对象编程的Class(类)机制。Class提供了一种更简洁、更直观的方式来定义对象和操作对象的行为。本文将介绍ES6中Class的概念、语法和特性,并通过示例代码来说明其实际应用。
|
6月前
|
JavaScript 前端开发
带你读《现代Javascript高级教程》十三、面向对象编程与Class(1)
带你读《现代Javascript高级教程》十三、面向对象编程与Class(1)
|
6月前
|
JavaScript 前端开发
带你读《现代Javascript高级教程》十三、面向对象编程与Class(2)
带你读《现代Javascript高级教程》十三、面向对象编程与Class(2)
|
6月前
|
JavaScript 前端开发
带你读《现代Javascript高级教程》十三、面向对象编程与Class(3)
带你读《现代Javascript高级教程》十三、面向对象编程与Class(3)
|
6月前
|
JavaScript 前端开发
带你读《现代Javascript高级教程》十三、面向对象编程与Class(4)
带你读《现代Javascript高级教程》十三、面向对象编程与Class(4)
|
8月前
|
JavaScript
JS Class 使用以及静态方法的调用
JS Class 使用以及静态方法的调用
75 0
|
9月前
|
JavaScript 前端开发
vue.js—v-bind绑定Class与Style
vue.js—v-bind绑定Class与Style
83 0