Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 25.06.2020, 18:33
Интересующийся
Отправить личное сообщение для Launder Посмотреть профиль Найти все сообщения от Launder
 
Регистрация: 25.04.2019
Сообщений: 19

Скажите а в чём смысл приватных свойств объекта, если их так легко можно реализовать через замыкания?...
Ответить с цитированием
  #12 (permalink)  
Старый 25.06.2020, 19:47
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,692

Сообщение от Launder
если их так легко можно реализовать через замыкания?...
А как вы в классе опишите замыкание?
class A {
 field1;
 field2;
 constructor () {...}
 meth1 () {...}
 meth2 () {...}
}

Где вы опишите переменную, которую "замыкает"?
Ответить с цитированием
  #13 (permalink)  
Старый 25.06.2020, 20:15
Интересующийся
Отправить личное сообщение для Launder Посмотреть профиль Найти все сообщения от Launder
 
Регистрация: 25.04.2019
Сообщений: 19

Ну отсюда второй вопрос возникает В каких ситуациях использования классов, прям уж так необходимо?...
У меня опыт маленький, поэтому, могу чего-то не понимать, но случаев, где я не увидел, как обычные функции полноценно заменяют классы(то есть прекрасно прописывают прототипные ссылки), было, вроде, всего два:
Первое. Когда у нас есть родитель и его метод. И есть наследник, и его метод. И нужно (желательно), чтоб метод наследника назывался также, и содержал в себе уточнённое поведение метода родителя. В этом случае, да, классы удобнее.
Второе. Когда изучал конструктор ошибок. Без классового синтаксиса с его super добиться нормального наследования, не получилось.
Но опять же, я не слишком искушён, возможно, просто плохо себе представлял чего куда прописывать.
А так, иногда создаётся впечатления, что классы, призванные сделать синтаксис более простым и прозрачным, на деле, таковым являются, для решения каких-то достаточно типовых задачах. А настраивать их сложнее... Вот, как раз, в случае с замыканиями. Хочу реализовать приватные свойства, с помощью замыканий они делаются на раз, а без них? Левой ногой через правое ухо
Ответить с цитированием
  #14 (permalink)  
Старый 26.06.2020, 07:30
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

Сейчас добавили для классов настоящие приватные свойства вида:
#<имя>
, раньше просто писали
_<имя>
и соглашались, что мол свойства начинающиеся на
_
считаем приватными и не трогаем снаружи.)

P.S. Лично меня, как адепта монкипатчинга, раздражают эти нововведения. Учитывая среднее качество гонокода в вебе, иметь возможность запатчить что-то внутри - насущная необходимость.)
__________________
29375, 35

Последний раз редактировалось Aetae, 26.06.2020 в 07:32.
Ответить с цитированием
  #15 (permalink)  
Старый 26.06.2020, 08:54
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,692

Сообщение от Aetae
Сейчас добавили для классов настоящие приватные свойства вида:
С поддержкой пока плоховато. Только в хромовых браузерах.
Да и то не полностью. Например, даже в хроме пока нет конструкции o?.#x
Пока нет приватных методов.

Я правда не очень понимаю такую уж большую необходимость введения приватных свойств. Защищенные (protected) были бы более насущными и востребованными.
Ответить с цитированием
  #16 (permalink)  
Старый 26.06.2020, 11:47
Интересующийся
Отправить личное сообщение для Launder Посмотреть профиль Найти все сообщения от Launder
 
Регистрация: 25.04.2019
Сообщений: 19

Какие аспекты программирования плохо реализовывать с помощью модулей? По-идее, всё закрыто, выводим только то, что считаем нужным, расширяем дополняем модифицируем... В чём минусы? Почему такой большой акцент на классы?
Ответить с цитированием
  #17 (permalink)  
Старый 26.06.2020, 11:55
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

Модули - это модули, классы - это классы.
Классы нужны для ООП. О преимуществах ООП написаны гигабайты, гуглите.
Модули нужны для удобства разделения кода, не важно ООП вы используете или функциональщину.
__________________
29375, 35
Ответить с цитированием
  #18 (permalink)  
Старый 26.06.2020, 11:57
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,692

Ну как бы одно квадратное, а другое зеленое.

Как модули без использования классов (функций конструкторов) помогут создавать объекты с методами, свойствами, наследованием...?
Ответить с цитированием
  #19 (permalink)  
Старый 26.06.2020, 11:59
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

Сообщение от Launder
я не увидел, как обычные функции полноценно заменяют классы
https://ui.dev/javascript-inheritanc...ototype-chain/

Надо вот это прочитать, в этой же книге есть пример из предыдущей ссылки:
https://addyosmani.com/resources/ess...patterns/book/

Introduction
What is a Pattern?
"Pattern"-ity Testing, Proto-Patterns & The Rule Of Three
The Structure Of A Design Pattern
Writing Design Patterns
Anti-Patterns
Categories Of Design Pattern
Summary Table Of Design Pattern Categorization

JavaScript Design Patterns

Constructor Pattern
Module Pattern
Revealing Module Pattern
Singleton Pattern
Observer Pattern
Mediator Pattern
Prototype Pattern
Command Pattern
Facade Pattern
Factory Pattern
Mixin Pattern
Decorator Pattern
Flyweight Pattern

JavaScript MV* Patterns

MVC Pattern
MVP Pattern
MVVM Pattern

Modern Modular JavaScript Design Patterns
AMD
CommonJS
ES Harmony

Design Patterns In jQuery
Composite Pattern
Adapter Pattern
Facade Pattern
Observer Pattern
Iterator Pattern
Lazy Initialization Pattern
Proxy Pattern
Builder Pattern
jQuery Plugin Design Patterns
JavaScript Namespacing Patterns
Conclusions
References

Сообщение от Launder
А так, иногда создаётся впечатления, что классы, призванные сделать синтаксис более простым и прозрачным
это звучит так, что все делается методом тыка... компьютер толи включился, толи выключился, но я жал на кнопки ...

Сообщение от voraa
o?.#x
o? в хроме работает, но к #x разве можно обращаться (к приватному полю) напрямую (не через публичный метод), или тут что-то другое подразумевалось, тогда, наверное...
Ответить с цитированием
  #20 (permalink)  
Старый 26.06.2020, 12:13
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,692

Сообщение от SuperZen
o? в хроме работает, но к #x разве можно обращаться (к приватному полю) напрямую (не через публичный метод), или тут что-то другое подразумевалось, тогда, наверное...
Это просто тестовый пример, который определяет поддержку возможности.
class C {
  #x = 42;
  x(o = this){
    return o?.#x;
  }
}
return new C().x() === 42 && new C().x(null) === void 0;

Взят отсюда https://kangax.github.io/compat-table/esnext/

Насколько это реально нужно? Кто его знает
Возможно такая фиговина может понадобится.

Последний раз редактировалось voraa, 26.06.2020 в 12:16.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск