#javascript #class #methods #jsobject
#javascript #класс #методы #jsobject
Вопрос:
Мне было интересно, возможно ли это, если кто-нибудь знает решение проблемы, с которой я столкнулся. Допустим, у нас есть следующий класс JavaScript:
class foo {
// Class Method.
makeNoise() {
console.log("bar");
}
// Class Object
classObject = {
makeASound: function() {
makeNoise();
}
}
}
Теперь, если бы я должен был вызвать:
var foo = new foo();
foo.classObject.makeASound();
Я бы получил сообщение об ошибке, в котором говорится, что makeNoise не определен. Использование ‘this.’ не сработало бы, потому что в этом контексте это привело бы к поиску функции внутри classObject и, следовательно, выдало бы ошибку ‘is not a function’. Существует ли вообще возможность доступа к makeNoise из функции объекта.
Ответ №1:
Вам нужно будет использовать функцию со стрелкой, чтобы избежать создания нового контекста, а затем использовать ключевое слово this
, чтобы правильно получить доступ к makeNoise
методу класса
class Foo {
makeNoise() {
console.log("bar");
}
classObject = {
makeASound: () => { // arrow function for lexical scope
this.makeNoise(); // using `this` to refer to the Foo method
},
};
}
Вы также могли бы использовать Function.bind(), если предпочитаете
Ответ №2:
Попробуйте this.makeNoise()
classObject = {
makeASound: () => {
this.makeNoise();
}
}
Обновление: Если мы используем функцию со стрелкой для makeASound
, мы можем сохранить нашу this
привязку к родительскому классу. Гмайоло правильно понял это в своем ответе.
Комментарии:
1. Это приводит к той же ошибке, потому что
function
создает новыйthis