На самом деле это не совсем наследование, а скорее расширение и дополнение функциональности блока.
const parent_block = de.block( ... );
const child_block = parent_block( {
block: {
// Модификации блока.
},
options: {
// Модификации опций блока.
},
} );
Для каждого options.*
и параметров блока отдельно описано, как они наследуются.
Здесь показано, как все это работает в связке.
Блок выполняется примерно в таком порядке:
|
v
params --------
| |
v |
before -------v
| |
v |
action -------v
| |
v v
after error
Если мы расширяем блок, то схема усложняется до такой:
|
v
child.params ---------------------------
| |
v |
child.before --------------------------v
| |
v |
parent.params -------- |
| | |
v | |
parent.before -------v |
| | |
v | |
action --------------v |
| | |
v v |
parent.after parent.error --------v
| |
v v
child.after child.error
Т.е. для потомка схема такая же, как для обычного блока, но:
-
В качестве экшена у него весь родительский блок целиком (как черный яшик).
-
В каждом "слое" используется свой
error
. Т.е. ошибки изparent.*
сперва попадают вparent.error
. И оттуда уже вchild.error
. А ошибки вchild.*
попадают сразу вchild.error
и родитель ничего про них не знает. -
Параметры, которые используются в каждом "слое" так же разные. В
child.params
приходят оригинальные параметры изde.run
. То, что вернулось оттуда используется вchild.*
. Они же подаются на вход вparent.params
и то, что вернулось оттуда используется во всехparent.*
и в экшене.