2017-03-21 91 views
0

我做了這個ES6類,我試圖使用我在構造函數中定義的變量,但是當我console.log this.customerTz它返回undefinedEs6類變量

我也試着把變量放在類的頂部,但它似乎不工作。
是否有可能有變量?

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

看起來你不想class都做,因爲沒有理由來實例化這個構造。相反,使用普通的對象文本爲模塊:

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方法。您可以使convertToUtc不是一個靜態方法,然後在DateTimeConverter類的一個實例上調用它。

0

您的功能convertToUtc是靜態的。靜態函數與類本身相關聯,而不是類的實例。構造函數未被調用,因爲您不創建實例。所以this.customerTz將不會在函數內部定義。取出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>