Как правильно переопределить метод

192
15 декабря 2021, 00:50

У меня есть класс Point в котором существует метод showPoints() для вывода информации о точке с координатами и установкой координаты x и y. Создать второстепенный класс Graphicpoint. В этом классе добавляются новые данные: цвет точки, функция вывода координат точки.Я сделал так , но у меня возникла проблема с наследованием. В коде видно, что я создаю метод в классе предка в котором добавляю значение координат в массив. Но когда я переопределяю метод в классе graphicPoint то этот метод просто не видит эту переменную. Получается когда мы переопределяем метод , переменные которые были там объявлены не передаются в метод другого класса? Как тогда будет правильно поступить, можно ли к примеру тогда объявить эту переменную в конструкторе класса Point

class Point{
  constructor(x,y){
    this.x = x;
    this.y = y;
  }
  showPoints(){
    let resultArr = [];
    resultArr.push(this.x);
    resultArr.push(this.y);
    return resultArr;
  }
  set cordinateX(number){
    this.x = number;
  }
  set cordinateY(number){
    this.y = number;
  }
}
class GraphicPoint extends Point{
    constructor(x,y,color){
      super(x,y);
      this.color = color;
    }
    showPoints(){
    super.showPoints();
    resultArr.push(this.color);
    return resultArr;
    }
}
Answer 1

Как пример, можно сделать вот так:

class Point { 
  constructor(x, y) { 
    this.x = x; 
    this.y = y; 
  } 
 
  getPoints() { 
    return [this.x, this.y]; 
  } 
} 
 
class GraphicPoint extends Point { 
  constructor(x, y, color) { 
    super(x, y); 
    this.color = color; 
  } 
 
  getPoints() { 
    return [...super.getPoints(), this.color]; 
  } 
} 
 
var gp = new GraphicPoint(1, 3, 'red'); 
 
console.log(gp.getPoints());

Answer 2
showPoints(){
  let resultArr = [];
  resultArr.push(this.x);
  resultArr.push(this.y);
  return resultArr;
}

Здесь resultArr локальная переменная внутри Point.showPoints, о которой снаружи этого метода никому ничего не известно.

class Point { 
  constructor(x, y) { 
    this.x = x; 
    this.y = y; 
  } 
 
  showPoints() { 
    let resultArr = []; 
    resultArr.push(this.x); 
    resultArr.push(this.y); 
    return resultArr; 
  } 
 
  set cordinateX(number) { 
    this.x = number; 
  } 
 
  set cordinateY(number) { 
    this.y = number; 
  } 
 
} 
 
class GraphicPoint extends Point { 
  constructor(x, y, color) { 
    super(x, y); 
    this.color = color; 
  } 
  showPoints() { 
    var resultArr = super.showPoints(); // !!! 
    resultArr.push(this.color); 
    return resultArr; 
  } 
} 
 
var gp = new GraphicPoint(123, 456, "green"); 
console.log(gp.showPoints());

READ ALSO
Как правильно 'перехватить' событие?

Как правильно 'перехватить' событие?

У меня есть div, в котором распологаются img и aНужно вызвать событие при клике по любой области этого элемента: и по пустой, и по тем, где расположены...

130
Независимый блок

Независимый блок

Понимаю вопрос может быть не слишком понятен, но постараюсь изложить суть как можно яснееЕсть блоки в которых расположен контент, они имеют...

95
Не применяется свойство top к div блоку

Не применяется свойство top к div блоку

Есть блок div с названием класса penguin, мне нужно опустить данный блок на 10% вниз от родительского блока, но свойство top не применяетсяПробовал...

183
NullPointerException при проверке admin ли пользователь

NullPointerException при проверке admin ли пользователь

при регистрации пользователя нужно проверить явдяется ли он администратором,проще сказать admin ли его логин, и если он админ,то перекидываю...

227