Прототип метода в ES6

Я хочу написать это с помощью ES6, однако я застрял и нуждаюсь в вашей помощи. Когда я использую ES6, объявляю мой метод, прототип метода дает мне эту ошибку:

Uncaught TypeError: Невозможно установить свойство «move» неопределенного на planeJS.js: 238

let SI = {};
//some SI.Properties that i need...

// SI.SpaceShip = function (options) { // works fine
SI.SpaceShip = (options) => { // gives error
let defaultOptions = {
    x: 0,
    y: 0,
    width: 0,
    height: 0,
    img: null,
    imgX: 0, 
}
for (let key in defaultOptions) {
    if(options.hasOwnProperty(key)) {
        this[key] = options[key];
    }
    else {
        this[key] = defaultOptions[key];
    }
}
}

Это прототип:

SI.SpaceShip.prototype.move = function (deltaX, deltaY) {
    this.x += deltaX;
    if(this.x <= 0) {
        this.x = 0;
    }
    else if(this.x >= SI.Sizes.width - this.width) {
        this.x = SI.Sizes.width - this.width;
    }

    this.y += deltaY;
    if(this.y <= 0) {
        this.y = 0;
    }
    else if(this.y >= SI.Sizes.height - this.height) {
        this.x = SI.Sizes.height - this.height;
    }
}

javascript,

-1

Ответов: 1


1 принят

Функция Arrow не имеет прототипа и не может использоваться как конструктор объекта. См. MDN

Выражение функции функции [...] не имеет собственных аргументов, аргументов, супер или new.target . Эти выражения функций лучше всего подходят для функций не-метода, и они не могут использоваться в качестве конструкторов .

Вы можете это исправить

SI.SpaceShip = function (options) { ...
JavaScript,
Похожие вопросы