2016-10-25 3 views
1

I가 예상대로 작동하지만, 나는 그것이 올바른 방법입니다 확신 아니에요 다음 코드 :ES.next 정적 클래스 속성을 참조하는 적절한 방법은 무엇입니까?

'use strict'; 

class Upload { 
    static uploadCount = 20; 

    constructor(props) { 
    Upload.uploadCount++; 
    } 

    static get count() { 
    return this.uploadCount; 
    } 
} 

const up1 = new Upload({ 
    name: 'Wow.pdf', 
    size: 123123, 
}); 

const up2 = new Upload({ 
    name: 'doit.pdf', 
    size: 9999999, 
}); 

console.log(Upload.count); 

constructor 정적 게터 캔처럼 this.uploadCount를 통해 정적 var에 참조 할 수 없습니다? 인스턴스화 된 Upload 개체의 양을 추적하는 더 좋고/올바른 방법이 있습니까?

+0

fwiw, 크롬 52 로그에서 'Uncaught SyntaxError : 예상치 않은 토큰 ='이 (가) 'static uploadCount = 20;'을 (를) 가리키는 것으로 보입니다. [정적 메소드] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes#Static_methods) – guest271314

+1

을 참조하십시오. 브라우저를 사용하는 대신에 바벨을 사용하고 있습니다. ES6 제안. – ffxsam

+1

Nit : "ES6 제안"이 아니라 ECMAScript 구문 제안입니다. – loganfsmyth

답변

2

this은 방금 생성 된 개체 인스턴스를 참조합니다. 정적 속성은 인스턴스가 아니라 생성자 자체의 속성입니다. 따라서 인스턴스 메서드에서 인스턴스를 참조하려면 Upload.uploadCount과 같이 생성자 이름을 사용해야합니다.


참고로, 사용하는 구문은 다음과 같습니다

static uploadCount = 20; 

는 ES2015의 표준과 나는 그것이 바벨로되어 작동하는지 확실히 알고있는 유일한 장소가 아니다. 이식 가능한 코드를 원하고 Babel을 사용하지 않는 경우 해당 구문을 사용하면 안됩니다. 당신은 구식으로 변경할 수 있습니다 :

Upload.uploadCount = 20; 

그리고 클래스 정의 다음에 넣고 이식성이 있어야합니다.


정적 속성에 사용할 구문은 향후 JS 개정판에서 제안되지만 마지막으로 아직 확인되지 않았 음을 확인했습니다.

+0

좋습니다. 'Upload.uploadCount'는'constructor' 내에서 정적 속성을 참조하는 정확한 방법입니까? – ffxsam

+0

@ffxsam - 그렇습니다. 정적 인 방법이 아닌 곳에서는 어디서나 그것을 수행 할 수 있습니다. 정적 메소드는 클래스 이름을 통해 참조되기 때문에 정적 메소드의'this' 값은 클래스 이름으로 설정됩니다. – jfriend00

+0

내가 댓글을 달았을 때처럼 게시물을 편집했습니다. 좋아요. 좋은 소리로 들리 겠지만, 내가 올바른 방법으로 이것을하고 있는지 확인하고 싶었습니다. 감사! – ffxsam