>  기사  >  웹 프론트엔드  >  ES6에서는 클래스를 어떻게 정의하나요?

ES6에서는 클래스를 어떻게 정의하나요?

青灯夜游
青灯夜游원래의
2022-03-09 18:52:281546검색

ES6에서는 객체에 대한 템플릿으로 클래스(class)가 도입되었으며, "class" 키워드를 통해 클래스를 정의할 수 있습니다. 클래스의 본질은 함수입니다. 이는 구문 설탕으로 간주될 수 있으며 객체 프로토타입 작성을 더 명확하고 객체 지향 프로그래밍의 구문과 더 유사하게 만듭니다.

ES6에서는 클래스를 어떻게 정의하나요?

이 튜토리얼의 운영 환경: Windows 7 시스템, ECMAScript 버전 6, Dell G3 컴퓨터.

ES6 Class

ES6에서는 클래스(class)가 객체의 템플릿으로 도입되었으며 클래스는 "class" 키워드를 통해 정의할 수 있습니다.

수업의 본질은 기능입니다.

기본적으로 ES6 클래스는 단지 구문 설탕으로 간주될 수 있습니다. 대부분의 기능은 ES5에서 달성할 수 있습니다. 새로운 클래스 작성 방법은 객체 프로토타입의 작성 방법을 더 명확하고 객체 지향 프로그래밍의 구문과 더 유사하게 만듭니다. .

기본 사용법

클래스 정의

클래스 표현식은 익명이거나 이름이 지정될 수 있습니다.

// 匿名类
let Example = class {
    constructor(a) {
        this.a = a;
    }
}
// 命名类
let Example = class Example {
    constructor(a) {
        this.a = a;
    }
}

클래스 선언

class Example {
    constructor(a) {
        this.a = a;
    }
}

주의 사항: 반복 가능한 선언은 허용되지 않습니다.

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

주의 사항:

클래스 정의는 승격되지 않습니다. 즉, 액세스하기 전에 클래스를 정의해야 하며 그렇지 않으면 오류가 보고됩니다.

클래스의 메서드에는 function 키워드가 필요하지 않습니다.

메소드 사이에는 세미콜론이 없습니다.

new Example(); 
class Example {}

클래스 본문

Properties

prototype

ES6에서는 메소드가 클래스에서 직접 정의될 수 있지만 실제로는 프로토타입에 정의되어 있습니다. 초기화 시 메소드 재정의/메서드 추가

Example.prototype={
    //methods
}

Add 메소드

Object.assign(Example.prototype,{
    //methods
})

정적 속성

정적 속성: 클래스 자체의 속성, 즉 클래스 내부에 직접 정의된 속성(Class.propname)은 반드시 그럴 필요는 없습니다. 인스턴스화되었습니다. ES6에서는 Class 내부에 정적 메서드만 있고 정적 속성은 없다고 규정합니다.

class Example {
// 新提案
    static a = 2;
}
// 目前可行写法
Example.b = 2;

공용 속성

class Example{}
Example.prototype.a = 2;

인스턴스 속성

인스턴스 속성: 인스턴스 객체(this)에 정의된 속성입니다.

class Example {
    a = 2;
    constructor () {
        console.log(this.a);
    }
}

name attribute

클래스 다음에 오는 클래스 이름을 반환합니다(존재하는 경우).

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

method

constructor method

constructor 메서드는 클래스의 기본 메서드이며 클래스의 인스턴스화된 개체를 생성할 때 호출됩니다.

class Example{
    constructor(){
      console.log('我是constructor');
    }
}
new Example(); // 我是constructor

반환 객체

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

정적 메소드

class Example{
    static sum(a, b) {
        console.log(a+b);
    }
}
Example.sum(1, 2); // 3

프로토타입 메소드

class Example {
    sum(a, b) {
        console.log(a + b);
    }
}
let exam = new Example();
exam.sum(1, 2); // 3

인스턴스 메소드

class Example {
    constructor() {
        this.sum = (a, b) => {
            console.log(a + b);
        }
    }
}

클래스 인스턴스화

new

클래스는 다음을 통해 인스턴스화되어야 합니다. 새로운 키워드.

class Example {}
 
let exam1 = Example(); 
// Class constructor Example cannot be invoked without 'new'

인스턴화된 객체

공유 프로토타입 객체

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

[관련 권장 사항: javascript 비디오 튜토리얼, 웹 프론트 엔드]

위 내용은 ES6에서는 클래스를 어떻게 정의하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.