Привет всем, я недавно начал работать с javascript и пытаюсь узнать о классах и объектах, но столкнулся с небольшой проблемой, которую не смог преодолеть, поэтому вот мой код
class bubbleSorter{
constructor(/*params*/){
//some fields
}
#bubbleSorter = () =>{
//some code
}
getBubbleSorter = () =>{
this.#bubbleSorter();
}
}
let obj = new bubbleSorter(/*params*/);
console.log(obj.getBubbleSorter());
это пример моего кода. всякий раз, когда я пытаюсь зарегистрировать метод getter, он не совсем работает, но когда я вместо этого вызываю метод bubbleSorter -- предполагая, что я удаляю символ # -- он волшебным образом работает, я не знаю, почему это происходит, я попытался сделать доступным bubbleSorter, а затем вызвать его внутри getBubbleSorter все еще не работает
Не используйте стрелочные функции в качестве методов класса.
@ Бармар, почему?
Поскольку им не передается
this
, они сохраняют исходныйthis
с момента их определения.get bubbleSorter() { /*somecode*/ }
« всякий раз, когда я пытаюсь зарегистрировать метод получения, он не совсем работает », что вы имеете в виду? Ваш метод
getBubbleSorter()
ничего не возвращает, поэтому он всегда неявно выдаетundefined
. Это общее поведение для всех функций. Если ваш#bubbleSorter()
должен возвращать значение, вам нужноreturn this.#bubbleSorter();
внутриgetBubbleSorter()
. Если это не так, вам нужно объяснить, что здесь означает «не работает».@Barmar Это все еще не работает, хотя я изменил его на обычные функции.
@Barmar « они сохраняют исходное это, когда они были определены », что будет созданием объекта, поэтому
this
будет указывать на созданный экземпляр. В этом случае значения должны быть правильными. Если конструктор не заменитthis
на какой-то другой экземпляр. jsbin.com/qonudesalu/1/edit?js,consoleПожалуйста, опубликуйте минимальный воспроизводимый пример и объясните, что должен делать код.
@VLAZ Ах да. Связанный вопрос касается методов в объекте, а не методов в классах.