03.03.2009, 16:46
|
|
Интересующийся
|
|
Регистрация: 02.03.2009
Сообщений: 20
|
|
Сообщение от Zeroglif
|
Отсюда 2 вывода - то ли вам важны локальные переменные ($className), то ли вам не нравится "обвешивать" объект-прототип руками или через for-in...
|
Локальные переменные не важны. Это просто одна из возможностей.
А вот "обвешивать" объект мне не нравится - это точно.
Сообщение от Zeroglif
|
instanceof не оправдывает своего названия буквально и является терминологической натяжкой из чужого class-based мира, в js объекты наследуют от объектов, понятия "класс" не просто нет, а если бы оно даже и было, то мы бы столкнулись с задачей определения, что включить в этот термин - прототип или прототипы, конструктор или конструкторы, или всё вместе, что участвовало в создании цепочки или её составляет, при этом, если цепь прототипов после содания хе-хе "instance" можно считать стабильной и связанной с ним, то свойству 'prototype' конструкторов можно присваивать другие значения, что делает алгоритм instanceof в этом случае бесполезным.
|
Тут не соглашусь. instanceof работает как ему положено. Вопрос в том, правильно ли мы его используем. Понятно, что в javascript-е можно перехерачить любой объект до неузнаваемости, но в таком случае, его никто и не узнает
Если архитектура приложения правильная, то иерархия наследования не может быть не стабильной. Если цепочка где-то ломается - плохая архитектура.
Язык дает программисту полную свободу, но не стоит ей злоупотреблять.
|
|
03.03.2009, 17:06
|
...
|
|
Регистрация: 09.03.2008
Сообщений: 216
|
|
Сообщение от Pavel_Volodko
|
А вот "обвешивать" объект мне не нравится - это точно.
|
Ну, вот и причина.
Сообщение от Pavel_Volodko
|
Вопрос в том, правильно ли мы его используем.
|
А как бы вы его (оператор) правильно использовали? Пусть мы узнали, что sidorov instanceof Person, и что дальше с этим делать?
|
|
03.03.2009, 17:06
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Цитата:
|
Дело не в эмулировании. Дело в том, что я расширяю стандартные возможности javascript или пытаюсь сделать что-то немного удобнее для использования при разработке. Если решение мне помогает - цель достигнута.
|
если тебе помогает, это хорошо. Я просто не знаю, как оно мне может помочь
Цитата:
|
Насчет "естественный вариант должен быть проще, по идее" - проще не значит лучше. Я и сам за простые решения.
|
имелось в виду "Сделай так просто, как возможно, но не проще этого"
Цитата:
|
Кстати, с этой точки зрения, моё решение абсолютно естественное, т.к. построено на элементарных возможностях прототипного наследования
|
оно не может быть абсолютно естественным, т.к. это наследование, построенное на базе прототипного (естественного) наследования
Цитата:
|
Если архитектура приложения правильная, то иерархия наследования не может быть не стабильной. Если цепочка где-то ломается - плохая архитектура
|
что-то мне кажется, что не все так однозначно - "только классические иерархии, к которым мы привыкли в статических языках"
|
|
03.03.2009, 17:15
|
|
Интересующийся
|
|
Регистрация: 02.03.2009
Сообщений: 20
|
|
Сообщение от Zeroglif
|
Ну, вот и причина.
А как бы вы его (оператор) правильно использовали? Пусть мы узнали, что sidorov instanceof Person, и что дальше с этим делать?
|
:confused: Даже не знаю, что и сказать... Да что нужно, то и делайте. Это же просто инструмент. Это тоже самое, что сказать "ну есть у меня молоток и что с ним делать?". Не знаете что делать, значит вам не нужен молоток
|
|
03.03.2009, 17:21
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Зачем нам instanceof, если у нас duck typing?
|
|
03.03.2009, 17:22
|
|
Интересующийся
|
|
Регистрация: 02.03.2009
Сообщений: 20
|
|
Сообщение от x-yuri
|
если тебе помогает, это хорошо. Я просто не знаю, как оно мне может помочь
имелось в виду "Сделай так просто, как возможно, но не проще этого"
оно не может быть абсолютно естественным, т.к. это наследование, построенное на базе прототипного (естественного) наследования
что-то мне кажется, что не все так однозначно - "только классические иерархии, к которым мы привыкли в статических языках"
|
Это уже какая-то философия.
Ещё раз повторюсь - я сделал то, что мне было нужно, исходя из своих собственных представлений о процессе разработки на javascript. Если вы не видите как это можно использовать, значит вам это и не нужно. Всего-то.
Я просто хочу показать, что можно делать вот так, но не утверждаю, что по-другому нельзя.
|
|
03.03.2009, 17:24
|
...
|
|
Регистрация: 09.03.2008
Сообщений: 216
|
|
Сообщение от Pavel_Volodko
|
Не знаете что делать, значит вам не нужен молоток
|
Я знаю, что этот молоток мне совершенно не поможет, поэтому давно его не использую. Вообще. Просто вы сказали, что instanceof надо правильно использовать, что это определитель принадлежности объекта классу и проч., так как вы с ним работаете? На примере того же sidorov-а, допустим мы с помощью молотка instanceof узнали, что Person.prototype находится в где-то в цепи прототипов sidorov-a, и дальше что?
|
|
03.03.2009, 17:40
|
|
Интересующийся
|
|
Регистрация: 02.03.2009
Сообщений: 20
|
|
Сообщение от Zeroglif
|
Я знаю, что этот молоток мне совершенно не поможет, поэтому давно его не использую. Вообще. Просто вы сказали, что instanceof надо правильно использовать, что это определитель принадлежности объекта классу и проч., так как вы с ним работаете? На примере того же sidorov-а, допустим мы с помощью молотка instanceof узнали, что Person.prototype находится в где-то в цепи прототипов sidorov-a, и дальше что?
|
Под "правильно использовать" имелось ввиду с архитектурной точки зрения.
Загляните в код Prototype. Там есть примеры использования.
|
|
03.03.2009, 17:49
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
Сообщение от Pavel_Volodko
|
Под "правильно использовать" имелось ввиду с архитектурной точки зрения.
|
Ну вот, всё-таки, интерес больше академический, нежели прикладной (это тоже хорошо). Однако, в данном случае получается instanceof ради instanceof; на практике он вряд ли пригодиться.
А в целом, если Вам удобно и иерархическая структура при использовании этой обёртки Вам кажется более удобной - это самое главное (с учётом, естественно, что Вы знаете и понимаете, как это работает без обёртки).
А вообще,
Сообщение от x-yuri
|
это наследование, построенное на базе прототипного (естественного) наследования
|
Что значит на базе? Это и есть прототипное наследование. Просто в удобной (в конкретном случае, для конкретного человека) обёртке. Суть там никак не меняется.
update:
Сообщение от Kolyaj
|
Зачем нам instanceof, если у нас duck typing?
|
а зачем подобный оператор в других языках (Python, Ruby) и при наличии duck typing'a?
Последний раз редактировалось Dmitry A. Soshnikov, 03.03.2009 в 18:14.
Причина: опечатки
|
|
03.03.2009, 18:05
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Цитата:
|
Что значит на базе? Это и есть прототипное наследование. Просто удобной (в конкретном случае, для конкретного человека) обёртке. Суть там никак не меняется
|
реализация - прототипное наследование естественно, но ведь автор хочет сэмулировать классовое наследование. Возможно будут ситуации, когда прийдется вспомнить, что в Javascript нету классового наследования
Цитата:
|
А в целом, если Вам удобно и иерархическая структура при использовании этой обёртки Вам кажется более удобной - это самое главно (с учётом, естественно, что Вы знаете и понимаете, как это работает без обёртки)
|
|
|
|
|