#javascript
#javascript
Вопрос:
Допустим, у меня есть класс, такой как следующий. Подходит ли передача this
для импортированного класса? Или есть лучший способ получить доступ к области родительского класса?
import Fruit from 'fruit'
export default class Banana {
constructor () {
this.color = 'yellow'
}
let length = new Fruit(this).getLength()
}
export default class Fruit {
constructor(scope) {
this.parentScope = scope
}
getLength() {
if (this.parentScope.color == 'yellow') {
return 5
}
}
}
Есть ли лучший способ?
Комментарии:
1. В этом случае вам действительно нужно передать область видимости, когда все общедоступные свойства класса уже доступны через его объект. Какую пользу принесет передача области видимости?
2. @Saksham Не могли бы вы показать мне, как получить доступ к общедоступным свойствам из Fruit?
3.
let length = new Fruit(this).getLength()
недопустимо там, где это в вашем первом примере, поэтому трудно дать какой-либо совет.4. Мне также неясно, что вы подразумеваете под «областью видимости родительского объекта», потому что «область видимости» имеет конкретное значение, но здесь это не применимо. Но я согласен с Фродо, что вы, вероятно, хотите наследования.
5. @FelixKling недействителен? Это определенно работает… я бы сказал, это просто неправильно, но да, я думаю, что наследование здесь является ответом.
Ответ №1:
Да, сэр, есть лучший способ, он называется наследованием классов. Вы хотите, чтобы ваш класс banana расширял класс fruit. Таким образом, они оба являются одним и тем же объектом, и ваш banana наследует все методы и свойства класса fruit .
export default class Banana extends Fruit {
Ответ №2:
Я думаю, что есть несколько концепций, которые вам не хватает, которые я исправил, внеся наименьшие изменения в ваш код
class Fruit {
getLength(color) {
if (color == 'yellow') {
return 5;
}
}
}
class Banana {
constructor() {
this.color = 'yellow';
let length = (new Fruit()).getLength(this.color);
alert(length);
}
}
let aFruit = new Banana();
Основная часть заключается в том, что вместо передачи всей области видимости вы можете передать только цвет объекта Banana.
Если у вас действительно есть что-то общее с родительской областью видимости, попробуйте расширить дочерний класс из родительского.