Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   "Классический" ООП в JavaScript (https://javascript.ru/forum/misc/2740-klassicheskijj-oop-v-javascript.html)

Pavel_Volodko 03.03.2009 16:46

Цитата:

Сообщение от Zeroglif (Сообщение 13539)
Отсюда 2 вывода - то ли вам важны локальные переменные ($className), то ли вам не нравится "обвешивать" объект-прототип руками или через for-in...

Локальные переменные не важны. Это просто одна из возможностей.
А вот "обвешивать" объект мне не нравится - это точно.

Цитата:

Сообщение от Zeroglif (Сообщение 13540)
instanceof не оправдывает своего названия буквально и является терминологической натяжкой из чужого class-based мира, в js объекты наследуют от объектов, понятия "класс" не просто нет, а если бы оно даже и было, то мы бы столкнулись с задачей определения, что включить в этот термин - прототип или прототипы, конструктор или конструкторы, или всё вместе, что участвовало в создании цепочки или её составляет, при этом, если цепь прототипов после содания хе-хе "instance" можно считать стабильной и связанной с ним, то свойству 'prototype' конструкторов можно присваивать другие значения, что делает алгоритм instanceof в этом случае бесполезным.

Тут не соглашусь. instanceof работает как ему положено. Вопрос в том, правильно ли мы его используем. Понятно, что в javascript-е можно перехерачить любой объект до неузнаваемости, но в таком случае, его никто и не узнает :)
Если архитектура приложения правильная, то иерархия наследования не может быть не стабильной. Если цепочка где-то ломается - плохая архитектура.
Язык дает программисту полную свободу, но не стоит ей злоупотреблять.

Zeroglif 03.03.2009 17:06

Цитата:

Сообщение от Pavel_Volodko
А вот "обвешивать" объект мне не нравится - это точно.

Ну, вот и причина.

Цитата:

Сообщение от Pavel_Volodko
Вопрос в том, правильно ли мы его используем.

А как бы вы его (оператор) правильно использовали? Пусть мы узнали, что sidorov instanceof Person, и что дальше с этим делать?

x-yuri 03.03.2009 17:06

Цитата:

Дело не в эмулировании. Дело в том, что я расширяю стандартные возможности javascript или пытаюсь сделать что-то немного удобнее для использования при разработке. Если решение мне помогает - цель достигнута.
если тебе помогает, это хорошо. Я просто не знаю, как оно мне может помочь :blink:

Цитата:

Насчет "естественный вариант должен быть проще, по идее" - проще не значит лучше. Я и сам за простые решения.
имелось в виду "Сделай так просто, как возможно, но не проще этого"

Цитата:

Кстати, с этой точки зрения, моё решение абсолютно естественное, т.к. построено на элементарных возможностях прототипного наследования
оно не может быть абсолютно естественным, т.к. это наследование, построенное на базе прототипного (естественного) наследования

Цитата:

Если архитектура приложения правильная, то иерархия наследования не может быть не стабильной. Если цепочка где-то ломается - плохая архитектура
что-то мне кажется, что не все так однозначно - "только классические иерархии, к которым мы привыкли в статических языках"

Pavel_Volodko 03.03.2009 17:15

Цитата:

Сообщение от Zeroglif (Сообщение 13544)
Ну, вот и причина.


А как бы вы его (оператор) правильно использовали? Пусть мы узнали, что sidorov instanceof Person, и что дальше с этим делать?

:confused: Даже не знаю, что и сказать... Да что нужно, то и делайте. Это же просто инструмент. Это тоже самое, что сказать "ну есть у меня молоток и что с ним делать?". Не знаете что делать, значит вам не нужен молоток :)

Kolyaj 03.03.2009 17:21

Зачем нам instanceof, если у нас duck typing?

Pavel_Volodko 03.03.2009 17:22

Цитата:

Сообщение от x-yuri (Сообщение 13545)
если тебе помогает, это хорошо. Я просто не знаю, как оно мне может помочь :blink:


имелось в виду "Сделай так просто, как возможно, но не проще этого"


оно не может быть абсолютно естественным, т.к. это наследование, построенное на базе прототипного (естественного) наследования


что-то мне кажется, что не все так однозначно - "только классические иерархии, к которым мы привыкли в статических языках"

Это уже какая-то философия.

Ещё раз повторюсь - я сделал то, что мне было нужно, исходя из своих собственных представлений о процессе разработки на javascript. Если вы не видите как это можно использовать, значит вам это и не нужно. Всего-то.

Я просто хочу показать, что можно делать вот так, но не утверждаю, что по-другому нельзя.

Zeroglif 03.03.2009 17:24

Цитата:

Сообщение от Pavel_Volodko
Не знаете что делать, значит вам не нужен молоток

Я знаю, что этот молоток мне совершенно не поможет, поэтому давно его не использую. Вообще. Просто вы сказали, что instanceof надо правильно использовать, что это определитель принадлежности объекта классу и проч., так как вы с ним работаете? На примере того же sidorov-а, допустим мы с помощью молотка instanceof узнали, что Person.prototype находится в где-то в цепи прототипов sidorov-a, и дальше что?

Pavel_Volodko 03.03.2009 17:40

Цитата:

Сообщение от Zeroglif (Сообщение 13551)
Я знаю, что этот молоток мне совершенно не поможет, поэтому давно его не использую. Вообще. Просто вы сказали, что instanceof надо правильно использовать, что это определитель принадлежности объекта классу и проч., так как вы с ним работаете? На примере того же sidorov-а, допустим мы с помощью молотка instanceof узнали, что Person.prototype находится в где-то в цепи прототипов sidorov-a, и дальше что?

Под "правильно использовать" имелось ввиду с архитектурной точки зрения.
Загляните в код Prototype. Там есть примеры использования.

Dmitry A. Soshnikov 03.03.2009 17:49

Цитата:

Сообщение от Pavel_Volodko
Под "правильно использовать" имелось ввиду с архитектурной точки зрения.

Ну вот, всё-таки, интерес больше академический, нежели прикладной (это тоже хорошо). Однако, в данном случае получается instanceof ради instanceof; на практике он вряд ли пригодиться.

А в целом, если Вам удобно и иерархическая структура при использовании этой обёртки Вам кажется более удобной - это самое главное (с учётом, естественно, что Вы знаете и понимаете, как это работает без обёртки).

А вообще,
Цитата:

Сообщение от x-yuri
это наследование, построенное на базе прототипного (естественного) наследования

Что значит на базе? Это и есть прототипное наследование. Просто в удобной (в конкретном случае, для конкретного человека) обёртке. Суть там никак не меняется.

update:
Цитата:

Сообщение от Kolyaj
Зачем нам instanceof, если у нас duck typing?

а зачем подобный оператор в других языках (Python, Ruby) и при наличии duck typing'a?

x-yuri 03.03.2009 18:05

Цитата:

Что значит на базе? Это и есть прототипное наследование. Просто удобной (в конкретном случае, для конкретного человека) обёртке. Суть там никак не меняется
реализация - прототипное наследование естественно, но ведь автор хочет сэмулировать классовое наследование. Возможно будут ситуации, когда прийдется вспомнить, что в Javascript нету классового наследования

Цитата:

А в целом, если Вам удобно и иерархическая структура при использовании этой обёртки Вам кажется более удобной - это самое главно (с учётом, естественно, что Вы знаете и понимаете, как это работает без обёртки)
:yes:


Часовой пояс GMT +3, время: 19:33.