2016-07-08 3 views
12

는 x와 y는 생성자에 선언하는 방법을 참조하십시오 :선언 ES6 급 호텔 외부 기능

class Point { 
    constructor(x, y) { 
    this.x = x; 
    this.y = y; 
    } 
    toString() { 
    return '(' + this.x + ', ' + this.y + ')'; 
    } 
} 

예를 들어 기능 이외의 속성을 선언 할 수있는 방법이 :

class Point { 
    // Declare static class property here 
    // a: 22 
    constructor(x, y) { 
    this.x = x; 
    this.y = y; 
    } 
    toString() { 
    return '(' + this.x + ', ' + this.y + ')'; 
    } 
} 

그래서 내가 원하는 a를 22로 지정하지만 생성자 바깥에서도 수행 할 수 있는지 여부는 확실하지 않지만 클래스 내부는 여전히 알 수 있습니다.

+1

내가 당신을 생각 예를 들어 위와 동일합니다 static get x() {return 5; }', 똑같은 일을 끝내는, 그냥 오히려 어리 석다. – somethinghere

답변

16

ES6의 클래스에서 직접 속성 초기화는 not possible이고 m 이 방식으로 현재의 법칙을 선언 할 수 있습니다. 동일한 규칙이 ES7에도 적용됩니다.

그러나 ES7 (현재 3 단계) 이후에 나올 가능성이있는 기능입니다. 다음은 official proposal입니다.

또한, 제안이 제안하는 구문은 slightly different (= 대신 :)입니다 : 당신이 바벨을 사용하는 경우

class Point { 
    // Declare class property 
    a = 22 
    // Declare class static property 
    static b = 33 
} 

,이 기능을 사용하려면 단계 3 설정을 사용할 수 있습니다.

Here's a Babel REPL example


생성자보다, ES6에 다른이 작업을 수행하는 다른 방법은, 클래스 정의 후 그것을 할 수 있습니다 :

여기
class Point { 
    // ... 
} 

// Declare class property 
Point.prototype.a = 22; 

// Declare class static property 
Point.b = 33; 

이 주제에 good SO Thread 다이빙의 일부


아니요 테 :

class Point { 
    // Declare class property 
    a = 22 
} 

그냥 문법 설탕이 코드에 대한 바로 가기를 제공하는 것입니다 :

코멘트에 언급 BERGI, 제안 된 구문 으로

class Point { 
    constructor() { 
    this.a = 22; 
    } 
} 

그 모두 문은 인스턴스에 속성을 할당합니다.

var point = new Point(); 
p.a // 22 
p.b // 33 

그러나 b을 점점 요구가 계속 기업 :

class Point { 
    constructor() { 
    this.a = 22; // this becomes a property directly on the instance 
    } 
} 

Point.prototype.b = 33; // this becomes a property on the prototype 

것은 모두 여전히 인스턴스를 통해 제공 될 것이다 :

그러나,이 프로토 타입에 할당과 완전히 동일하지 않습니다 프로토 타입 체인 a 개체에 직접 사용할 수 있습니다. nem035 @

enter image description here

+0

'static get x() {}'도 사용할 수 없습니까? 그냥 궁금해. 사실 그것은 똑같은 것입니까? – somethinghere

+0

글쎄, 정말 같은 효과가 아니지만 유사 할 수 있습니다. 'get'을 사용하면 생성자에서 선언 된 상수 값이나 다른 값을 얻을 수 있습니다.이 값은 직접 가져올 수있는 값을 선언하는 것과 같지 않습니다. – nem035

+1

Hmmm true. 아아, 신의 유일한 통사론에 설탕을 바르게 고맙다. 우리는 언제나 js의 위대한 객체 유산에 의지 할 수있다. – somethinghere

1

는 제안 단계에 있음을 권리입니다.

그러나 @ nem035의 sugggetion은 클래스 인스턴스 구성원으로이를 구현하는 한 가지 방법입니다.

// 정적 클래스 속성을 선언 여기

정적 멤버를 선언 찾고있는 것 같다. 네, 자바 스크립트 방법은 당신이 실제로 기대되는 방법은 타이프 라이터

class Point { 
    static a = 22; 
} 

수행 할 수 있습니다

class Point { 
    // ... 
} 
Point.a = '22'; 

경우 컴파일 된 출력은

Point.a = '22';