169 похожих чатов

Доброго дня Вопрос по js Есть объект вида: markdown const FOO =

{
key1: 'test',
key2: {
  'test2',
  'test3',
  get bar() {
    return `${this.key1}$. {this.key2.test2}`
}
}
}

Вывод FOO.key2.bar выводит ошибку undefined

В чем может быть проблема?
Тут проблема в области видимости или другая причина?

37 ответов

112 просмотров

А переменные test2 и test3 определены? Здесь используется короткая запись, где свойство test2 определяется значением переменной test2

Фәнил-Зарип Автор вопроса
Grigorii K. Shartsev
А переменные test2 и test3 определены? Здесь испо...

Да, скорректировал, похоже уже понял. Дело всё таки в области видимости, он привязывается к области вложенного объекта

Фәнил Зарип
Да, скорректировал, похоже уже понял. Дело всё та...

А, не увидел что там key, а не test. Да, только это не про область видимости, а про определение контекста. this, если явно не привязан - это объект у которого вызывается метод

Фәнил-Зарип Автор вопроса

А как-то можно получить доступ к свойству родительского объекта?)

Фәнил Зарип
А как-то можно получить доступ к свойству родитель...

Нет "родительского" объекта. Тут просто свойство, которое ссылается на другой объект. Но на него может ссылаться куча свойств в самых разных объектах одновременно. Можно просто обращаться не к this, а у FOO, либо явно биндить контекст

Фәнил Зарип
А как-то можно получить доступ к свойству родитель...

прототип можно у всех дочерних указывать на корневой

что такое get bar()?

Grigorii K. Shartsev
Геттер

действительно великий могучий javascript...

Ruslan
действительно великий могучий javascript...

Их добавили ещё в ES5 и на них основана реактивность в Vue 2! :D

Grigorii K. Shartsev
Их добавили ещё в ES5 и на них основана реактивнос...

В прикладном программировани такого не часто встречал В других языках есть?

Ruslan
В прикладном программировани такого не часто встре...

Начиная с es6 просто в таких случаях чаще используют классы, там те же геттеры и сеттеры

Ruslan
действительно великий могучий javascript...

так вью 2 на них чисто и работал .-.

Vyacheslav Гайсин
есть, тот же C# взять

И что там? Работаешь извне напрямую с переменной объекта, а под капотом вызываются определенные тобой методы?

Ruslan
И что там? Работаешь извне напрямую с переменной о...

Ну геттеры/сеттеры в классах там также есть. Вроде во всех ООП языках есть популярных

Denis Chernov
во многих, тема стара как мир

Мы говорим о разных вещах В нормальном мире объект - это набор свойств/аттрибутов и методов В JS тут идет смешение свойства и методов

Ruslan
Мы говорим о разных вещах В нормальном мире объект...

Чем отличается "набор свойств и методов" от "смешение свойств и методов"?

Grigorii K. Shartsev
Ну геттеры/сеттеры в классах там также есть. Вроде...

Геттеры и сеттеры в ООП языках это обычные методы Функции И обращение к ним идет как к методам

Grigorii K. Shartsev
Чем отличается "набор свойств и методов" от "смеше...

То что ты вроде работаешь с примитивным свойством объекта, а на самом деле происходит непонятно что Вроде тут недавно переопределения функций Реактом ругиали

Ruslan
Геттеры и сеттеры в ООП языках это обычные методы ...

public class Person { public string? FirstName { get { return _firstName; } set { _firstName = value; } } private string? _firstName; // Omitted for brevity. } hero.FirstName = "";

Grigorii K. Shartsev
public class Person { public string? FirstName...

https://learn.microsoft.com/en-us/dotnet/csharp/properties

Grigorii K. Shartsev
https://learn.microsoft.com/en-us/dotnet/csharp/pr...

Аналогичное есть в пайтоне, котлине class Rectangle(val width: Int, val height: Int) { val area: Int get() = this.width * this.height } rectangleInstance.area //

Grigorii K. Shartsev
Аналогичное есть в пайтоне, котлине class Rectangl...

В C# и Котлин - действительно В Питоне - нет, это обычные функции

Ruslan
В C# и Котлин - действительно В Питоне - нет, это ...

class Foo: def __init__(self, number): self._number = number @property def str_number(self): return str(self._number) @str_number.setter def str_number(self, value): self._number = int(value)

Grigorii K. Shartsev
class Foo: def __init__(self, number): self....

Ужас... Чем больше узнаю языки программирования, тем больше люблю Java

Если я пишу foo.bar = 3, то я ожидаю что foo.bar = 3 Если у него стоит сеттер и другое поведение, то это переопределение и неправильно Потому что foo.bar = 3; console.log(foo.bar); // 5 это чушь

Ruslan
Если я пишу foo.bar = 3, то я ожидаю что foo.bar =...

const a = ref() const b = {} a.value = b console.log(a.value === b) // false

Ruslan
Если я пишу foo.bar = 3, то я ожидаю что foo.bar =...

> Потому что > foo.bar = 3; > console.log(foo.bar); // 5 Не нужно так использовать геттер/сеттер

Grigorii K. Shartsev
const a = ref() const b = {} a.value = b console.l...

Ну ссылочные типы и реактивность тут ни при чем абсолютно

Ruslan
Ну ссылочные типы и реактивность тут ни при чем аб...

Ну буквально та же проблема, я присвоил в свойство значение (не вызывал же метод setValue()), беру значение того же свойства и там что-то другое. И норм, никакой чуши. Проблема не в геттерах/сеттерах, а в том как их используют. modelValue Proxy - тоже чушь?

Ruslan
Если я пишу foo.bar = 3, то я ожидаю что foo.bar =...

нууууу если ты науршщаешь контракт то да

Grigorii K. Shartsev
> Потому что > foo.bar = 3; > console.log(foo.bar...

Если ты используешь сеттер то всегда может возникнуть аналогичная ситуацию При вызове явно функции ты получаешь результат, исключение и много других возможностей контроля кода

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта