2017-03-21 13 views
0

私はこのES6クラスを作成しました。コンストラクタで定義した変数を使用しようとしていますが、console.log this.customerTzの場合はundefinedを返します。Es6クラス変数

私はまた、変数をクラスの最上位に配置しようとしましたが、動作しないようです。
変数を使用することはできますか?

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は静的メソッドなので、あなたが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>

のようにコードを変更することができます