this возвращает неопределенное значение в расширенных классах в Javascript - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь запустить приведенный ниже код, но он не работает. Я думаю, что это проблема с областью действия, но я не уверен, как это исправить.

import CommonController from './CommonController';
import CategoryService from './category/Service.js';

class CategoryController extends CommonController {
  constructor() {
    super(CategoryService);
  }
}
export default new CategoryController();

// ===================CommonController==========================

export default class CommonController {
  constructor(service) {
    this.service = service;
  }

  async get () {
    console.log(this); // it returns undefined
  }
}

// ===================CategoryService==========================
import Category from './Category'
import dto from './dto'

class CategoryService extends CommonService {
  constructor() {
    super(Category, dto);
  }
}
export default new CategoryService();

// ===================CommonService==========================

export default class CommonService {
  constructor(model, dto) {
    this.model = model;
    this.dto = dto;
  }
 }

, если запустить:

import CategoryController from './CategoryController';

CategoryController.get()

console.log в функции get CommonController будет print undefined

Я что-то не так делаю?

1 Ответ

2 голосов
/ 11 февраля 2020

Проблема в том, что вы вызываете get() для самого класса , вместо того, чтобы вызывать его для экземпляра класса. Попробуйте создать экземпляр CategoryController, например так:

cc = new CategoryController();

Затем вы сможете вызвать:

cc.get();

Демонстрация в приведенном ниже коде (так же, как у вас, просто немного изменен, чтобы отразить мою точку зрения).

// ===================CommonController==========================

class CommonController {
  constructor(service) {
    this.service = service;
  }
  
  async get () {
    console.log(this); // it returns undefined
  }
}



// ===================CommonService==========================

class CommonService {
  constructor(model, dto) {
    this.model = model;
    this.dto = dto;
  }
 }

// ===================CategoryService==========================
class CategoryService extends CommonService {
  constructor() {
    super(Category, dto);
  }
}

class CategoryController extends CommonController {
  constructor() {
    super(CategoryService);
  }
}
 
 
 cs = new CategoryController();
 cs.get();
...