2017-03-21 2 views
0

이 ES6 클래스를 만들었고 생성자에서 정의한 변수를 사용하려고하는데 console.log가 this.customerTz 인 경우 undefined을 반환합니다.Es6 클래스 변수

나는 변수를 클래스의 맨 위에 놓으려고했으나 작동하지 않는 것 같습니다.
변수를 사용할 수 있습니까? convertToUtc 이후

class DateTimeConverter { 
constructor() { 
    this.format = 'YYYY-MM-DD HH:mm:ss'; 
    this.customerTz = 'Europe/Oslo'; 
} 

static convertToUtc(date) { 
    console.log(this.customerTz); 
    // Set customer timezone 
    date = moment.tz(date, this.customerTz); 

    // Convert to UTC 
    date = date.clone().tz('UTC'); 

    // Set format to something PHP thinks is valid 
    date = date.format(this.format); 

    return date; 
} 
} 

답변

1

꺼내.

const DateTimeConverter = { 
    format: 'YYYY-MM-DD HH:mm:ss', 
    customerTz: 'Europe/Oslo', 
    convertToUtc(date) { 
     console.log(this.customerTz); 
     // Set customer timezone 
     date = moment.tz(date, this.customerTz); 

     // Convert to UTC 
     date = date.clone().tz('UTC'); 

     // Set format to something PHP thinks is valid 
     date = date.format(this.format); 

     return date; 
    } 
}; 
1

는 convertToUtc 메서드를 호출 할 때 당신은 DateTimeConverter의 클래스의 인스턴스가 this이없는, 정적 방법이다. convertToUtc을 정적 메서드가 아니게 만든 다음 DateTimeConverter 클래스의 인스턴스에서 호출 할 수 있습니다.

0

귀하의 기능 convertToUtc은 정적입니다. 정적 함수는 클래스 자체가 아니라 클래스의 인스턴스와 연결됩니다. 인스턴스를 만들지 않기 때문에 생성자가 호출되지 않습니다. 그래서 this.customerTz은 함수 내에서 정의되지 않습니다. 이 생성자를 인스턴스화 할 이유가 없기 때문에 당신이 전혀 class을 원하지 않는 것이 보이는 static

class DateTimeConverter { 
    constructor() { 
    this.format = 'YYYY-MM-DD HH:mm:ss'; 
    this.customerTz = 'Europe/Oslo'; 
    } 

    convertToUtc(date) { 
    console.log(this.customerTz); 

    date = moment.tz(date, this.customerTz); 

    // Convert to UTC 
    date = date.clone().tz('UTC'); 

    // Set format to something PHP thinks is valid 
    date = date.format(this.format); 

    return date; 
    } 
} 
2

convertToUtc 정적 방법이며 인스턴스에서 모든 속성에 액세스 할 수 없습니다 : 대신, 모듈에 대한 리터럴 일반 객체를 사용합니다. 대신 아래

class DateTimeConverter { 
 
    
 
    static convertToUtc(date) { 
 
     console.log(DateTimeConverter.customerTz); // Static property 
 
     
 
     // Set customer timezone 
 
     date = moment.tz(date, DateTimeConverter.customerTz); 
 
    
 
     // Convert to UTC 
 
     date = date.clone().tz('UTC'); 
 
    
 
     // Set format to something PHP thinks is valid 
 
     date = date.format(DateTimeConverter.format); 
 
    
 
     return date; 
 
    } 
 
} 
 

 
DateTimeConverter.format = 'YYYY-MM-DD HH:mm:ss'; 
 
DateTimeConverter.customerTz = 'Europe/Oslo'; 
 

 

 
console.log(DateTimeConverter.convertToUtc(new Date()));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.0/moment.min.js"></script> 
 

 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.11/moment-timezone.min.js"></script>

같은 코드를 수정할 수 있습니다