2017-03-21 58 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>