то при вызове этой функции как function(myvariable) изменится лишь значение внутри функции, но не сама глобальная переменная. Нужно передать ссылку на саму глобальную переменную внутрь функции: какой правильный синтаксис?
Хотел создать функцию, которая бы работала в нескольких сценариях. Сценарий отличается тем, что я передаю функции в виде параметра некоторую глобальную переменную, в которой содержится текст. По результату работы этой функции, значение этого текста может быть изменено. Сейчас я вышел из положения таким образом, что сценарий у меня один и я работаю с глобальной переменной напрямую через её имя, а не через переданный параметр внутри функции (если так и оставить, то нужно под каждый сценарий писать свою функцию).
Да, очень интересно, как между скриптами обмениваться данными, раз уж это заявлено. Я тоже хочу несколько скриптов иметь, чтобы не загромождать код. И, как правило, создаются скрипты с похожими по смыслу функциями. И тоже не пойму, как это сделать, пример из документации не работает. 1.7.
Правильно ли я сделал, что в каждом из скриптов, где есть обращение к глобальной переменной инициировал создание объекта?
rules.js:
defineRule("schedule", {
when: cron("@every 10s"),
then: function() {
log("New greeting: " + ps.key);
}
});
var ps = new PersistentStorage("my-storage", { global: true });
log(ps.key);
// place your rules here or add more .js files in this directory
log("add your rules to /etc/wb-rules/");
global.js:
var ps = new PersistentStorage("my-storage", { global: true });
ps.key = "Hello World";
Так работает:
2019-02-25 20:19:33add your rules to /etc/wb-rules/
2019-02-25 20:19:43New greeting: Hello World
2019-02-25 20:19:53New greeting: Hello World
Хотя правильнее наверно просто декларировать без объявления:
var other_ps = PersistentStorage("my-storage", { global: true });
defineRule("schedule", {
when: cron("@every 10s"),
then: function() {
log("New greeting: " + other_ps.key);
}
});
// place your rules here or add more .js files in this directory
log("add your rules to /etc/wb-rules/");
Не могу понять, как создать объект, в который как в строке
var other_ps = PersistentStorage("my-storage", { global: true });
можно было бы объектом (global:true) передать входные переменные? Я не силен в js, на просторах не смог найти примера.
Я делаю так, определяю объект, который потом неск. раз буду вызывать:
this.do = function()
{
log("Name is " + this.Name + ", value is " + this.Value);
}
}
var SW = new Class1();
SW.Name = “SW name”;
SW.do();
var SW1 = new Class1({Name:“SW1”});
SW1.do();
получаю закономерно
2019-02-27 21:10:59Name is SW name, value is null
2019-02-27 21:10:59Name is null, value is null
Я понимаю, что присваивается в первом случае свойство, которое я передал, но как сделать чтобы заработал второй вызов с переданными именованными параметрами - не знаю, подскажите, пожалуйста, был бы признателен за помощь.
отдельный вопрос. Если я хочу создать несколько файлов с разными функциями, чтобы потом использовать их как библиотеки в моем проекте, как лучше поступать?
Присвоить функцию PersistentStorage как-то пока не получается, экспериментирую, но, чувствую, могу дел наворотить… Очень уж не хочется писать одну портянку на всю работу. Как это лучше организовать?
to poglazov
Например, я хочу в глобальную видимость перевести объект, чтобы потом из других скриптов его вызывать, создавать экземпляры, задавать свойства и т.д.
var GL = new PersistentStorage(“global_functions”,{global: true});
GL.temp = “global temp”;
this.do = function()
{
log("Name is " + this.Name + ", value is " + this.Value);
}
}
SW = new GL.Class1();
SW.Name = “SW name”;
SW.do();
var SW1 = new Class1({Name:“SW1”});
SW1.do();
log (GL.temp);
при объявлении Class, как глобального - все ок, не виснет, только вызываю новый экземпляр - все отваливается(
причем при ручном удалении этого скрипта из директории
:~# wb-rules restart
ERROR: 2019/02/27 18:38:47 error loading script file/dir restart: stat restart: no such file or directory
ERROR: 2019/02/27 18:38:47 no valid scripts found - не помогает и wb не отвисает,
а вот :~# service wb-rules restart помогает.
очень жду ответа, если можно, хотя бы коротко, натолкните, как решить вопрос? Очень не удобно портянку из универсальных функций в каждый скрипт вставлять(
Она не хуже предыдущей, и новый функционал, конечно, проверяли. Тщательного тестирования не производилось – поэтому, что называется “используйте на свой страх и риск”, как с любой бета-версий.