Пытаюсь разобраться с наследованием. два варианта блока. С модификатором и без. Блок с модификатором переопределяет одно свойство базового блока (мне бы этого хотелось). На практике получается что блок с модификатором перезаписывает значение базового блока. То есть значение становится одинаковым. В то же время, если значение свойства функция, то все работает как ожидается. Вопрос: Как грамотно переопределить свойство блока, используя модификатор? С чем связано такое поведение? Пример: https://gist.github.com/kompolom/e5fa798958887de9c144
@kompolom В целом не нужно этого хотеть — свойства пишутся в прототип, поэтому окажутся общими между всеми экземплярами блока. Чтобы создать свойство конкретного экземпляра, следует класть нужные значения в
this
, например, в момент инициализации блока. Но соглашусь, что получается неконсистентное поведение по сравнению с функциями.@dfilatov Дима, без твоей помощи не обойтись. Это особенность реализации
inherit
или баг?Получается декларация модификатора не создает новый прототип в цепочке?
@kompolom да, декларация модификатора насыщает уже имеющийся класс — это связано с тем, что модификаторы меняются в рантайме и мы ничего заново не переинстанцируем
то что написано в гисте нужно делать через методы (типа
_getProp
), а не свойства, тогда будет работать@tadatuta , @veged Спасибо за ответы. Возьму на заметку.
@kompolom Не забывай, что модификаторы у блока могут меняться в рантайме. Вместе с ними меняется и поведение. Если бы создавался новый прототип в цепочке, реализовать такое поведение было бы затруднительно.)