02.03.2009, 23:21
|
...
|
|
Регистрация: 13.10.2008
Сообщений: 225
|
|
Pavel_Volodko,
И мелкий же шрифт исходников у Вас в блоге, чуть глаза не сломал :/
|
|
03.03.2009, 03:53
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Цитата:
|
Я просто хотел узнать насколько необходимо использование оберток в реализации наследования
|
имхо, наследование на основе прототипов - естественное для javascript. Мне вот интересно, для чего эмулировать классическое наследование? Для людей которые к нему привыкли? Или есть еще причины?
p.s. эмулировать классическое наследование не сложнее чем использовать наследование, основанное на прототипах? Т.е. естественный вариант должен быть проще, по идее
|
|
03.03.2009, 13:16
|
...
|
|
Регистрация: 09.03.2008
Сообщений: 216
|
|
Сообщение от x-yuri
|
Или есть еще причины?
|
Реюз со своими тараканами. Например, автор характеризует классовое наследование, как:
Цитата:
|
1. Возможность четкого определения принадлежности объекта классу (instanceOf)
|
Чёткость в js почти невозможна , а instanceоf ни разу не показывает принадлежность к "классу".
Цитата:
|
2. Возможность вызова конструктора или любого метода базового класса
|
Так ли важно цепляться за структуру, сохраняя суперы? Не знаю, у каждого свои тараканы.
|
|
03.03.2009, 13:45
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
Сообщение от Zeroglif
|
Реюз со своими тараканами.
|
Вероятно, это единственная причина подобных (удобных, относительно своих тараканов) обёрток.
|
|
03.03.2009, 15:17
|
|
Интересующийся
|
|
Регистрация: 02.03.2009
Сообщений: 20
|
|
Сообщение от Zeroglif
|
Pavel_Volodko,
Сходу скачал только финальный вариант, сразу возник вопрос - почему передаются функции, а не заранее созданный объект-прототип? В смысле, в чём фишка?
upd а, идею функций понял, нужен верный $className...
upd2 и не хочется копировать...
|
Не совсем понял что значит "нужен верный $className"...
Фишка действительно в использовании функции вместо объекта-прототипа. Хотя, на самом деле, всё гениальное просто: для создания связной иерархии классов нужно цеплять прототипы к функциям-конструкторам. Имея только объект-прототип, мы такой возможности не имеем. Приходится извращаться со всякими __proto__, копированием методов или созданием фэйковых подклассов. А вот имея функцию-конструктор для создания объекта-прототипа всё делается элементарно.
upd копировать и не обязательно. Я сам очень настороженно отношусь к решениям, которым мне не до конца понятны. Я просто поделился тем, что сделал под себя. Just FYI, как говорится.
Сообщение от Kolyaj
|
А чем ваш способ this.method = function() {} отличается от приведенного прототайповского? (ну кроме того, что в прототайпе лучше тем, что вешается все на prototype)
|
В принципе, описано чуть выше.
На мой взгляд, достаточно заглянуть в метод Class.create() от Prototype, чтобы задаться кучей вопросов. Кроме того, выражение "вешается все на prototype" мне кажется странным (хотя, думаю, я понимаю что вы имеете ввиду) и уж тем более я не считаю это лучшим решением.
Последний раз редактировалось Pavel_Volodko, 03.03.2009 в 15:21.
Причина: добавил кое-что
|
|
03.03.2009, 15:36
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от Pavel_Volodko
|
На мой взгляд, достаточно заглянуть в метод Class.create() от Prototype, чтобы задаться кучей вопросов.
|
Когда я привожу в пример Prototype, я имею в виду версию где-то 1.5, где было еще поменьше лишнего. Другими словами принцип, а не реализация.
Сообщение от Pavel_Volodko
|
Кроме того, выражение "вешается все на prototype" мне кажется странным
|
Свойство -- prototype, фреймворк -- Prototype.
|
|
03.03.2009, 15:37
|
|
Интересующийся
|
|
Регистрация: 02.03.2009
Сообщений: 20
|
|
Сообщение от Zibba
|
Pavel_Volodko,
И мелкий же шрифт исходников у Вас в блоге, чуть глаза не сломал :/
|
Звиняйте, уж больно много кода было. В следующий раз будет по-крупнее.
Сообщение от x-yuri
|
имхо, наследование на основе прототипов - естественное для javascript. Мне вот интересно, для чего эмулировать классическое наследование? Для людей которые к нему привыкли? Или есть еще причины?
p.s. эмулировать классическое наследование не сложнее чем использовать наследование, основанное на прототипах? Т.е. естественный вариант должен быть проще, по идее
|
Дело не в эмулировании. Дело в том, что я расширяю стандартные возможности javascript или пытаюсь сделать что-то немного удобнее для использования при разработке. Если решение мне помогает - цель достигнута.
Насчет "естественный вариант должен быть проще, по идее" - проще не значит лучше. Я и сам за простые решения.
Кстати, с этой точки зрения, моё решение абсолютно естественное, т.к. построено на элементарных возможностях прототипного наследования.
|
|
03.03.2009, 15:46
|
|
Интересующийся
|
|
Регистрация: 02.03.2009
Сообщений: 20
|
|
Сообщение от Zeroglif
|
Реюз со своими тараканами. Например, автор характеризует классовое наследование, как:
Чёткость в js почти невозможна , а instanceоf ни разу не показывает принадлежность к "классу".
Так ли важно цепляться за структуру, сохраняя суперы? Не знаю, у каждого свои тараканы.
|
Я бы даже сказал: "чёткость в javascript - понятие расплывчатое"
По поводу instanceоf - по-подробнее плиз
Что касается "цепляться за структуру, сохраняя суперы" - только там где это нужно, естественно.
Сообщение от Dmitry A. Soshnikov
|
Вероятно, это единственная причина подобных (удобных, относительно своих тараканов) обёрток.
|
Тараканы - двигатель прогресса (c)
|
|
03.03.2009, 16:02
|
...
|
|
Регистрация: 09.03.2008
Сообщений: 216
|
|
Сообщение от Pavel_Volodko
|
А вот имея функцию-конструктор для создания объекта-прототипа всё делается элементарно.
|
Не намного элементарнее. Вы объединили несколько задач в одну. Цепочка наследования (делегирования) выстраивается с помошью объекта-прототипа, созданного "промежуточным" конструктором в стиле (паттерн by Lasse Reichstein Nielsen):
function inheritObject(object) {
function Dummy(){};
Dummy.prototype = object;
return new Dummy();
}
Одновременно вместо Dummy для "подклассов" используется заранее подготовленная и заложенная в функцию структура. То есть, получив правильно прилинкованный объект-прототип, вы вместо:
Person.prototype.x =//...
Person.prototype.y =//...
используете:
this.x = //...
this.y = //...
что, в принципе, почти то же самое кроме доступа к локальным переменным функции из методов. Отсюда 2 вывода - то ли вам важны локальные переменные ($className), то ли вам не нравится "обвешивать" объект-прототип руками или через for-in...
|
|
03.03.2009, 16:15
|
...
|
|
Регистрация: 09.03.2008
Сообщений: 216
|
|
Сообщение от Pavel_Volodko
|
По поводу instanceоf - по-подробнее плиз
|
instanceof не оправдывает своего названия буквально и является терминологической натяжкой из чужого class-based мира, в js объекты наследуют от объектов, понятия "класс" не просто нет, а если бы оно даже и было, то мы бы столкнулись с задачей определения, что включить в этот термин - прототип или прототипы, конструктор или конструкторы, или всё вместе, что участвовало в создании цепочки или её составляет, при этом, если цепь прототипов после содания хе-хе "instance" можно считать стабильной и связанной с ним, то свойству 'prototype' конструкторов можно присваивать другие значения, что делает алгоритм instanceof в этом случае бесполезным.
|
|
|
|