Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 02.03.2009, 23:21
...
Отправить личное сообщение для Zibba Посмотреть профиль Найти все сообщения от Zibba
 
Регистрация: 13.10.2008
Сообщений: 225

Pavel_Volodko,
И мелкий же шрифт исходников у Вас в блоге, чуть глаза не сломал :/
Ответить с цитированием
  #32 (permalink)  
Старый 03.03.2009, 03:53
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Цитата:
Я просто хотел узнать насколько необходимо использование оберток в реализации наследования
имхо, наследование на основе прототипов - естественное для javascript. Мне вот интересно, для чего эмулировать классическое наследование? Для людей которые к нему привыкли? Или есть еще причины?

p.s. эмулировать классическое наследование не сложнее чем использовать наследование, основанное на прототипах? Т.е. естественный вариант должен быть проще, по идее
Ответить с цитированием
  #33 (permalink)  
Старый 03.03.2009, 13:16
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

Сообщение от x-yuri
Или есть еще причины?
Реюз со своими тараканами. Например, автор характеризует классовое наследование, как:
Цитата:
1. Возможность четкого определения принадлежности объекта классу (instanceOf)
Чёткость в js почти невозможна , а instanceоf ни разу не показывает принадлежность к "классу".
Цитата:
2. Возможность вызова конструктора или любого метода базового класса
Так ли важно цепляться за структуру, сохраняя суперы? Не знаю, у каждого свои тараканы.
Ответить с цитированием
  #34 (permalink)  
Старый 03.03.2009, 13:45
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Zeroglif
Реюз со своими тараканами.
Вероятно, это единственная причина подобных (удобных, относительно своих тараканов) обёрток.
__________________
Тонкости ECMAScript
Ответить с цитированием
  #35 (permalink)  
Старый 03.03.2009, 15:17
Аватар для Pavel_Volodko
Интересующийся
Отправить личное сообщение для Pavel_Volodko Посмотреть профиль Найти все сообщения от Pavel_Volodko
 
Регистрация: 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. Причина: добавил кое-что
Ответить с цитированием
  #36 (permalink)  
Старый 03.03.2009, 15:36
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Pavel_Volodko
На мой взгляд, достаточно заглянуть в метод Class.create() от Prototype, чтобы задаться кучей вопросов.
Когда я привожу в пример Prototype, я имею в виду версию где-то 1.5, где было еще поменьше лишнего. Другими словами принцип, а не реализация.

Сообщение от Pavel_Volodko
Кроме того, выражение "вешается все на prototype" мне кажется странным
Свойство -- prototype, фреймворк -- Prototype.
Ответить с цитированием
  #37 (permalink)  
Старый 03.03.2009, 15:37
Аватар для Pavel_Volodko
Интересующийся
Отправить личное сообщение для Pavel_Volodko Посмотреть профиль Найти все сообщения от Pavel_Volodko
 
Регистрация: 02.03.2009
Сообщений: 20

Сообщение от Zibba Посмотреть сообщение
Pavel_Volodko,
И мелкий же шрифт исходников у Вас в блоге, чуть глаза не сломал :/
Звиняйте, уж больно много кода было. В следующий раз будет по-крупнее.

Сообщение от x-yuri Посмотреть сообщение
имхо, наследование на основе прототипов - естественное для javascript. Мне вот интересно, для чего эмулировать классическое наследование? Для людей которые к нему привыкли? Или есть еще причины?

p.s. эмулировать классическое наследование не сложнее чем использовать наследование, основанное на прототипах? Т.е. естественный вариант должен быть проще, по идее
Дело не в эмулировании. Дело в том, что я расширяю стандартные возможности javascript или пытаюсь сделать что-то немного удобнее для использования при разработке. Если решение мне помогает - цель достигнута.
Насчет "естественный вариант должен быть проще, по идее" - проще не значит лучше. Я и сам за простые решения.
Кстати, с этой точки зрения, моё решение абсолютно естественное, т.к. построено на элементарных возможностях прототипного наследования.
Ответить с цитированием
  #38 (permalink)  
Старый 03.03.2009, 15:46
Аватар для Pavel_Volodko
Интересующийся
Отправить личное сообщение для Pavel_Volodko Посмотреть профиль Найти все сообщения от Pavel_Volodko
 
Регистрация: 02.03.2009
Сообщений: 20

Сообщение от Zeroglif Посмотреть сообщение
Реюз со своими тараканами. Например, автор характеризует классовое наследование, как:

Чёткость в js почти невозможна , а instanceоf ни разу не показывает принадлежность к "классу".

Так ли важно цепляться за структуру, сохраняя суперы? Не знаю, у каждого свои тараканы.
Я бы даже сказал: "чёткость в javascript - понятие расплывчатое"

По поводу instanceоf - по-подробнее плиз

Что касается "цепляться за структуру, сохраняя суперы" - только там где это нужно, естественно.

Сообщение от Dmitry A. Soshnikov Посмотреть сообщение
Вероятно, это единственная причина подобных (удобных, относительно своих тараканов) обёрток.
Тараканы - двигатель прогресса (c)
Ответить с цитированием
  #39 (permalink)  
Старый 03.03.2009, 16:02
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 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...
Ответить с цитированием
  #40 (permalink)  
Старый 03.03.2009, 16:15
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с javascript andruhin Общие вопросы Javascript 12 04.05.2012 10:05
Программист на JavaScript (удалённо) Vadym Работа 1 28.01.2009 13:57
Компании Яндекс нужен Javascript гуру Yandex Работа 17 16.12.2008 16:46
Нужен Старший разработчик JavaScript Yandex Работа 17 19.08.2008 16:43
Требуется программист на JavaScript Vadym Работа 0 17.07.2008 20:40