I have a rectangle class and I want to use shift to assign new values to this.x and this.y by the shift amount. For example, the coordinates were assigned (5,5) r.shift(3,3) will make this.x and this.y (3,3). Currently, my code makes x and y new values, it doesn't reassign them. How would I go on to do so?
class Rectangle {
constructor(x, y, width, height){
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
}
Rectangle.prototype.shift = function (changeInX, changeInY) {
this.x = changeInX
this.y = changeInY
}
//returns value string
Rectangle.prototype.toString = function () {
return 'x is ' this.x ', y is ' this.y ', width is ' this.width ', height is ' this.height
}
//offsets coordinates by amount
Rectangle.prototype.offset = function (changeInX, changeInY) {
return new Rectangle(this.x changeInX, this.y changeInY, this.width, this.height)
}
CodePudding user response:
You need to use =
instead of just =
to increment this.x
in your shift
function.
e.g.:
this.x = changeInX
this.y = changeInY
Full modified example:
class Rectangle {
constructor(x, y, width, height){
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
}
Rectangle.prototype.shift = function (changeInX, changeInY) {
this.x = changeInX
this.y = changeInY
}
//returns value string
Rectangle.prototype.toString = function () {
return 'x is ' this.x ', y is ' this.y ', width is ' this.width ', height is ' this.height
}
//offsets coordinates by amount
Rectangle.prototype.offset = function (changeInX, changeInY) {
return new Rectangle(this.x changeInX, this.y changeInY, this.width, this.height)
}
const rect = new Rectangle(1, 2, 3, 4);
console.log('before:', rect.toString())
rect.shift(100, 200);
console.log('after:', rect.toString())