클래스: 정적 멤버

JavaScript의 클래스에는 정적 메서드와 속성이 있을 수 있습니다. 이러한 멤버는 클래스에서 생성된 개체의 멤버가 아니라 클래스의 멤버입니다. 대부분의 경우 유틸리티 메소드로 생성할 것입니다(클래스 인스턴스 비교, 객체 복제 또는 생성).

정적 메서드



class Person {
    name;
    age;

    constructor(name, age) {
        this.name = name;
        this.age = age;
    }

    static orderByAge(a, b) {
        return a.age - b.age;
    }
}

const employees = [
    new Person("Parwinder", 22),
    new Person("Robert", 33),
    new Person("George", 18),
    new Person("Eliu", 101),
    new Person("Gaurav", 39)
]

employees.sort(Person.orderByAge);

console.log(employees);

위의 예에서 Person 클래스는 이름과 나이를 가진 사람을 생성합니다. orderByAge 라는 클래스에 정적 메서드가 있습니다. 이 방법은 모두의 나이를 비교합니다Person. 나이의 순서는 특정 개인에 속하지 않고 그들 그룹(또는 그들이 모두 생성된 상위 클래스)에 속합니다.

위 코드의 출력은 다음과 같습니다.

[ Person { name: 'George', age: 18 },
  Person { name: 'Parwinder', age: 22 },
  Person { name: 'Robert', age: 33 },
  Person { name: 'Gaurav', age: 39 },
  Person { name: 'Eliu', age: 101 } ]

정적 메서드는 클래스에만 있는 메서드라는 것을 명심하십시오! 아래의 마지막 두 콘솔 로그를 수행할 수 없습니다.

class Person {
    name;
    age;

    constructor(name, age) {
        this.name = name;
        this.age = age;
    }

    static orderByAge(a, b) {
        return a.age - b.age;
    }

    static sayMyName(person) {
        return person.name;
    }
}

const me = new Person("Parwinder", 101);

console.log(me.name); // Parwinder => this is valid
console.log(me.age); // 101 => this is valid
console.log(me.orderByAge); // undefined or Property 'orderByAge' is a static member of type 'Person' 🚨
console.log(me.sayMyName); // undefined or Property 'sayMyName' is a static member of type 'Person' 🚨

정적 속성(또는 공개 정적 필드)



🚨 이 기능은 ES 제안의 3단계에 있습니다. 현재 Chrome 72 이상에서만 지원합니다. proposal herecompatibility here 확인

필드가 우리가 생성하는 모든 인스턴스가 아니라 클래스당 한 번만 존재해야 할 때 정적 필드를 사용합니다. 구성, 끝점, 캐시 등을 저장하는 데 사용할 수 있습니다.

class Base {
    static field = "Base Class";
}

class Child extends Base {

}

class GrandChild extends Child {
    static field = "Grand Child Class";
}

console.log(Base.field); // Base Class
console.log(Child.field); // Base Class
console.log(GrandChild.field); // Grand Child Class

좋은 웹페이지 즐겨찾기