Maison > interface Web > Questions et réponses frontales > Comment ES6 définit-il les classes ?

Comment ES6 définit-il les classes ?

青灯夜游
Libérer: 2022-03-09 18:52:28
original
1588 Les gens l'ont consulté

Dans ES6, la classe (class) a été introduite comme modèle pour les objets, et les classes peuvent être définies via le mot-clé "class". L'essence de la classe est la fonction, qui peut être considérée comme du sucre syntaxique, rendant l'écriture de prototypes d'objets plus claire et plus proche de la syntaxe de la programmation orientée objet.

Comment ES6 définit-il les classes ?

L'environnement d'exploitation de ce tutoriel : système Windows 7, ECMAScript version 6, ordinateur Dell G3.

Classe ES6

Dans ES6, la classe (class) a été introduite comme modèle pour les objets, et les classes peuvent être définies via le mot-clé "class".

L'essence de la classe est la fonction.

Fondamentalement, la classe ES6 peut être considérée comme un simple sucre de syntaxe. La plupart de ses fonctions peuvent être réalisées par ES5. La nouvelle méthode d'écriture de classe rend simplement la méthode d'écriture du prototype d'objet plus claire et ressemble davantage à la syntaxe de la programmation orientée objet. .

Utilisation de base

Définition de classe

Les expressions de classe peuvent être anonymes ou nommées.

// 匿名类
let Example = class {
    constructor(a) {
        this.a = a;
    }
}
// 命名类
let Example = class Example {
    constructor(a) {
        this.a = a;
    }
}
Copier après la connexion

Déclaration de classe

class Example {
    constructor(a) {
        this.a = a;
    }
}
Copier après la connexion

Points à noter : les déclarations répétables ne sont pas autorisées.

class Example{}
class Example{}
// Uncaught SyntaxError: Identifier 'Example' has already been 
// declared
 
let Example1 = class{}
class Example{}
// Uncaught SyntaxError: Identifier 'Example' has already been 
// declared
Copier après la connexion

Points à noter :

Les définitions de classe ne seront pas promues, ce qui signifie que la classe doit être définie avant d'y accéder, sinon une erreur sera signalée.

Les méthodes de la classe ne nécessitent pas le mot-clé function.

Pas de point-virgule entre les méthodes.

new Example(); 
class Example {}
Copier après la connexion

Le corps de la classe

Propriétés

prototype

Dans ES6, le prototype existe toujours Bien que les méthodes puissent être définies directement à partir de la classe, les méthodes sont en fait toujours définies sur le prototype. Remplacer la méthode/Ajouter une méthode lors de l'initialisation

Example.prototype={
    //methods
}
Copier après la connexion

Ajouter une méthode

Object.assign(Example.prototype,{
    //methods
})
Copier après la connexion

Propriété statique

Propriété statique : la propriété de la classe elle-même, c'est-à-dire la propriété (Class.propname) définie directement à l'intérieur de la classe, n'a pas besoin d'être instancié. ES6 stipule qu'il n'y a que des méthodes statiques à l'intérieur de Class et aucun attribut statique.

class Example {
// 新提案
    static a = 2;
}
// 目前可行写法
Example.b = 2;
Copier après la connexion

Propriétés publiques

class Example{}
Example.prototype.a = 2;
Copier après la connexion

Propriétés d'instance

Propriétés d'instance : Propriétés définies sur l'objet d'instance (this).

class Example {
    a = 2;
    constructor () {
        console.log(this.a);
    }
}
Copier après la connexion

attribut name

renvoie le nom de la classe qui suit la classe (quand elle existe).

let Example=class Exam {
    constructor(a) {
        this.a = a;
    }
}
console.log(Example.name); // Exam
 
let Example=class {
    constructor(a) {
        this.a = a;
    }
}
console.log(Example.name); // Example
Copier après la connexion

method

constructor method

constructor est la méthode par défaut de la classe et est appelée lors de la création d'un objet instancié de la classe.

class Example{
    constructor(){
      console.log('我是constructor');
    }
}
new Example(); // 我是constructor
Copier après la connexion

Objet de retour

class Test {
    constructor(){
        // 默认返回实例对象 this
    }
}
console.log(new Test() instanceof Test); // true
 
class Example {
    constructor(){
        // 指定返回对象
        return new Test();
    }
}
console.log(new Example() instanceof Example); // false
Copier après la connexion

Méthode statique

class Example{
    static sum(a, b) {
        console.log(a+b);
    }
}
Example.sum(1, 2); // 3
Copier après la connexion

Méthode prototype

class Example {
    sum(a, b) {
        console.log(a + b);
    }
}
let exam = new Example();
exam.sum(1, 2); // 3
Copier après la connexion

Méthode d'instance

class Example {
    constructor() {
        this.sum = (a, b) => {
            console.log(a + b);
        }
    }
}
Copier après la connexion

Instanciation de classe

new

class doit être instancié via le nouveau mot-clé.

class Example {}
 
let exam1 = Example(); 
// Class constructor Example cannot be invoked without 'new'
Copier après la connexion

Objets instanciés

Objets prototypes partagés

class Example {
    constructor(a, b) {
        this.a = a;
        this.b = b;
        console.log('Example');
    }
    sum() {
        return this.a + this.b;
    }
}
let exam1 = new Example(2, 1);
let exam2 = new Example(3, 1);
 
// __proto__ 已废弃,不建议使用
// console.log(exam1.__proto__ == exam2.__proto__); 
 
console.log(Object.getPrototypeOf(exam1) === Object.getPrototypeOf(exam2));// true
 
Object.getPrototypeOf(exam1).sub = function() {
    return this.a - this.b;
}
console.log(exam1.sub()); // 1
console.log(exam2.sub()); // 2
Copier après la connexion

[Recommandations associées : tutoriel vidéo javascript, front-end web]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal