Ecmascript 6 Es6类变量

Ecmascript 6 Es6类变量,ecmascript-6,Ecmascript 6,我创建了这个ES6类,我试图使用我在构造函数中定义的变量,但是当我console.logthis.customerTz时,它返回undefined 我还尝试将变量放在类的顶部,但似乎不起作用。 有可能有变量吗 class DateTimeConverter { constructor() { this.format = 'YYYY-MM-DD HH:mm:ss'; this.customerTz = 'Europe/Oslo'; } static convertToUtc(da

我创建了这个ES6类,我试图使用我在构造函数中定义的变量,但是当我console.log
this.customerTz
时,它返回
undefined

我还尝试将变量放在类的顶部,但似乎不起作用。
有可能有变量吗

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;
}
}

由于
convertToUtc
是一个静态方法,因此在调用convertToUtc方法时,没有DateTimeConverter类的实例
this
。您可以将
convertToUtc
设置为非静态方法,然后在DateTimeConverter类的实例上调用它。

由于
convertToUtc
是静态方法,因此在调用convertToUtc方法时,您没有DateTimeConverter类的实例
this
。您可以将
convertToUtc
设置为非静态方法,然后在DateTimeConverter类的实例上调用它。

您的函数
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;
  }
}

您的函数
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;
  }
}

看起来您根本不需要
,因为没有理由实例化这个构造函数。相反,请为模块使用普通对象文字:

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;
    }
};

看起来您根本不需要
,因为没有理由实例化这个构造函数。相反,请为模块使用普通对象文字:

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;
    }
};

convertToUtc
是一个静态方法,它无法访问实例上的任何属性。相反,您可以像下面这样修改代码

类日期时间转换器{
静态转换TOUTC(日期){
console.log(DateTimeConverter.customerTz);//静态属性
//设置客户时区
日期=矩.tz(日期,日期时间转换器.customerTz);
//转换为UTC
日期=date.clone().tz('UTC');
//将格式设置为PHP认为有效的格式
date=date.format(DateTimeConverter.format);
返回日期;
}
}
DateTimeConverter.format='YYYY-MM-DD HH:MM:ss';
DateTimeConverter.customerTz='欧洲/奥斯陆';
log(DateTimeConverter.convertToUtc(newdate())

convertToUtc
是一个静态方法,它无法访问实例上的任何属性。相反,您可以像下面这样修改代码

类日期时间转换器{
静态转换TOUTC(日期){
console.log(DateTimeConverter.customerTz);//静态属性
//设置客户时区
日期=矩.tz(日期,日期时间转换器.customerTz);
//转换为UTC
日期=date.clone().tz('UTC');
//将格式设置为PHP认为有效的格式
date=date.format(DateTimeConverter.format);
返回日期;
}
}
DateTimeConverter.format='YYYY-MM-DD HH:MM:ss';
DateTimeConverter.customerTz='欧洲/奥斯陆';
log(DateTimeConverter.convertToUtc(newdate())