Недопустимая левая часть в присваивании в конструкторе

Если я пытаюсь сделать плеер, я мог бы сделать это так

let player = game.add.sprite(100, 100, 'player');
player.speed = 4;
player.gravity = 1;

Я мог бы превратить это в функцию-конструктор, подобную этой

let player = new Player(100, 100);

function Player(x, y) {
  this = game.add.sprite(x, y, 'player');
  this.speed = 4;
  this.gravity = 1;
}

назначение this.speed и this.gravity работает нормально, но назначение this возвращает Uncaught SyntaxError: Invalid left-hand side in assignment

Попробуйте что-то вроде "this.sprite = game.add.sprite(x, y, 'игрок');".

Anton Podolsky 08.02.2023 16:29

Вы не можете присвоить значение this.

Pointy 08.02.2023 16:30

Используйте this.sprite = game.add.sprite(x, y, 'player');. Вы не можете изменить / назначить this. В конце концов ваш Player может расширить прототип спрайта Phaser, например: class Player extends Phaser.Sprite {

Roko C. Buljan 08.02.2023 16:31

Вы хотите, чтобы у Player был «спрайт» или это был «спрайт»?

David 08.02.2023 16:35

Если Player — это спрайт, возможно, лучше создать функцию, которая возвращает новый спрайт, а не конструктор, возвращающий объект Player, который является спрайтом.

EpicPuppy613 08.02.2023 16:38
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
5
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы действительно хотите, чтобы сделать это, вы можете сделать что-то вроде этого

function Player(x, y) {
  let p =  game.add.sprite(x, y, 'player');
  p.speed = 4;
  return p;
}

let player = new Player(100, 100);

НО два вопроса, зачем вы хотите это сделать? а какую версию фазера вы используете? Могут быть лучшие решения, такие как наследование/расширение.

Для Phaser CE/2: оформите заказ этот пример официальный пример
Для Phaser 3: оформить заказ этот пример официальный пример

Вам придется адаптировать примеры к вашему конкретному случаю, но они показывают, как это может работать.

Другие вопросы по теме