Мне нужно преобразовать этот код в ES6, я очень новичок в JS и я не уверен, как

#javascript #es6-modules

#javascript #es6-модули

Вопрос:

Я новичок в JS и не очень знаком со старой версией, у меня есть этот тест, который мне нужно преобразовать в Es6. Кто-нибудь может помочь мне понять, как я могу это сделать?

 'use strict';
function Shape(id, x, y) {
 this.id = id;
 this.setLocation(x, y);
}
Shape.prototype.setLocation = function(x, y) {
 this.x = x;
 this.y = y;
};
Shape.prototype.getLocation = function() {
 return {
 x: this.x,
 y: this.y
 };
};
Shape.prototype.toString = function() {
 return 'Shape('   this.id   ')';
};
function Circle(id, x, y, radius) {
 Shape.call(this, id, x, y);
 this.radius = radius;
}
Circle.prototype = Object.create(Shape.prototype);
Circle.prototype.constructor = Circle;
Circle.prototype.toString = function() {
 return 'Circle > '   Shape.prototype.toString.call(this);
};
  

Комментарии:

1. Начните с class Shape { ... } , затем переместите все из функции конструктора в constructor(...) { ... } и добавьте методы-прототипы как setLocation(...) { ... }

Ответ №1:

Преобразовано в классы:

 class Shape {
  constructor(id, x, y) {
    this.id = id;
    this.setLocation(x, y);
  }
  setLocation(x, y) {
    this.x = x;
    this.y = y;
  }
  getLocation = () => ({
    x: this.x,
    y: this.y
  })

  toString() {
    return `Shape(${this.id})`;
  }
}

class Circle extends Shape {
  constructor(id, x, y, radius) {
    super(id, x, y)
    this.radius = radius;
  }
  toString() {
    return `Circle> ${super.toString()}`;
  }
}

let shape = new Shape('shape', 5, 5);
let circle = new Circle('circle', 6, 6, 6);


console.log("Shape()",
  shape.getLocation(),
  shape.toString()
);
console.log("Circle()",
  circle.getLocation(),
  circle.toString()
);  

Надеюсь, это поможет,