wb_editors
154
правки
N.maslov (обсуждение | вклад) (Новая страница: «В обновлённом движке правил wb-rules присутствует ряд важных нововведений, касающихся логи…») |
N.maslov (обсуждение | вклад) |
||
Строка 45: | Строка 45: | ||
}, 1000); | }, 1000); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== Примечание ==== | |||
В предыдущих версиях wb-rules для изоляции правил рекомендовалось использовать замыкание, т.е. | |||
оборачивание кода сценария в конструкцию: | |||
<syntaxhighlight lang="js"> | |||
(function() { | |||
// код сценария идёт здесь | |||
})(); | |||
</syntaxhighlight> | |||
Начиная с версии 1.7, в подобной конструкции нет необходимости. Тем не менее, старые сценарии, | |||
использующие эту конструкцию, продолжат работу без изменений в поведении. | |||
==== Обходной путь ==== | |||
Если в вашей системе использовалось общее глобальное пространство для хранения общих данных и функций, | |||
есть несколько способов реализации такого поведения: | |||
===== Использование модулей ===== | |||
см. Модули | |||
===== Прототип глобального объекта ===== | |||
'''ВНИМАНИЕ:''' метод считается "грязным", т.к. все переменные и функции, опубликованные таким образом, | |||
становятся доступными всем сценариям в системе. Старайтесь избегать этого способа. За неопределённое | |||
поведение при использовании этого метода несёт ответственность сам программист. | |||
Глобальные объекты всех сценариев имеют общий объект-''прототип'', в котором определены стандартные функции | |||
wb-rules (такие, как defineRule, setTimeout и т.д.). Через него можно передавать переменные или функции | |||
в общую область видимости. | |||
<syntaxhighlight lang="js"> | |||
global.__proto__.myVar = 42; // теперь myVar - общая переменная для всех сценариев | |||
// из других сценариев к переменной можно обращаться так | |||
log("shared myVar: {}", myVar); | |||
// или вот так, что чуть более аккуратно, т.к. однозначно показывает, где определена переменная | |||
log("shared myVar: {}", global.__proto__.myVar); | |||
</syntaxhighlight> | |||
Правило поиска переменной в первом случае будет выглядеть так: | |||
# Проверяем, есть ли myVar среди локальных переменных (определённой как var myVar = ...). | |||
# Если нет, проверяем, есть ли myVar в глобальном объекте (определённой как myVar = ...). | |||
# Если нет, проверяем, есть ли myVar в ''прототипе'' глобального объекта (определённой как global.__proto__.myVar). | |||
Поиск останавливается, как только переменная найдена. | |||
Таким образом, первый способ обращения будет работать только в том случае, если myVar не определена в верхних областях видимости. |