2016-08-24 5 views
1

나는과 같이 ES6 클래스의 정적 클래스 속성 (스테이지 0)를 사용하려면 -다음 패턴의 ES6 상당?

class Button { 
    static size = { 
    SMALL: "SMALL", 
    BIG: "BIG" 
    } 
} 

class UILibrary { 
    consturctor() { 
    this.button = new Button(); 
    } 
} 

// I can't access static properties of a class instance :(
const LibraryA = new UILibrary(); 
console.log(LibraryA.button.size.SMALL); 

이에 대한 최선의 대안은 무엇인가?

편집 :

이 질문은 이미 단계-0에서 지원됩니다 ES6/7에 클래스 속성을 만드는 방법에 대해도 정적 메소드를 만드는 방법에 대해 없습니다. 클래스 인스턴스에 열거 형 객체를 첨부 할 수있는 패턴을 찾으려고합니다. 따라서 중복 된 질문 제안 중 어느 것도 유효하지 않습니다.

+1

'왜 이해가 안 돼요 '- 자바와 자바 스크립트는 완전히 다른 언어입니다 –

+2

https://esdiscuss.org/topic/define-static-properties-with-the-prototype-properties-with-the-class-syntax –

+0

@ JaromandaX Lol, 그건 사실이야. 그러나 모범 사례 관점에서 그렇게하는 이유가 있는지 알고 싶습니다. –

답변

3

나는 그들이 다음 정적 속성을 경우 생성자에에 액세스 할 필요가 클래스 인스턴스 :(

네의 정적 속성에 액세스 할 수 없습니다 : (

console.log(Button.size.SMALL); 
console.log(LibraryA.button.constructor.size.SMALL); 

차이점에 대한 설명은 here을 참조하십시오)

나는 패턴 t hat은 클래스 인스턴스에 열거 형 객체를 첨부 할 수 있습니다.

당신은 그들에게 static하지 않는, 그들이 경우에 사용 가능하게하려면 : 대신 static 키워드를 삭제의 바로 프로토 타입에 넣어,

class Button { 
    // without the experimental syntax, do the assignment in the constructor 
    size = { 
    SMALL: "SMALL", 
    BIG: "BIG" 
    } 
} 

또는되도록

class Button {} 
Button.prototype.size = { 
    SMALL: "SMALL", 
    BIG: "BIG" 
}; 

또는 어쩌면 당신은 모든 클래스에 열거 넣어해서는 안되며, 단지 ES6 모듈의 이름이 수출을 사용 목적은 반복 재현되지 않습니다.

+0

자세한 답변을 보내 주셔서 감사합니다. 프로토 타입 대안이 흥미로운 것 같습니다. 그것은 비록 어떤 성능 히트가 있습니까? –

+0

@ user3210476 : 아니요, 실제로 두 번째 죄수보다 적은 메모리를 사용합니다. 프로토 타입 속성과 자체 속성 간의 조회 시간 차이는 거의 측정 할 수 없으며 엔진 최적화에 많은 영향을줍니다. – Bergi