#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()
);
Надеюсь, это поможет,