EvilCat пишет:
Mur, разве так было?
В каком смысле было? Работало раньше? Ну как бы да.
EvilCat пишет:
Ведь оборачивание в самовызываемую анонимную функцию всегда служило лишь предотвращению засорения глобального пространства временными переменными.
Ну собственно да, именно для этого обёртку и делали.
EvilCat пишет:
Иначе говоря, (function() {...})() - это не какое-то хитрое заклинание, чтобы строчки кода запустились. Без него прекрасно всё запустится. Но переменные, объявленные как var, будут все глобальными, а если их обернуть в функцию - то они будут ограничены рамками этой функции.
Да не, по function() у меня вопросов нет, вопрос был в другом:
Для наглядности пример:
(function() {
var aaa = "Test!";
var Game_Event_setupPageSettings = Game_Event.prototype.setupPageSettings;
Game_Event.prototype.setupPageSettings = function() {
Game_Event_setupPageSettings.call(this);
console.log("aaa=" + aaa);
}
})();
До версии 1.6, при запуске мы получим в отладчике сообщение:
Начиная с 1.6 мы получаем сообщение об ошибке, что aaa undefined
Но! Если мы уберём в начале var:
(function() {
aaa = "Test!";
То и версии 1.6 получим желаемый результат.
Сейчас я вообще делаю по другому, не знаю насколько это правильно, но подсмотрено у Galv:
var Imported = Imported || {};
Imported.MUR_NPC = true;
var MUR = MUR || {}; // Глобальный object
MUR.NPC = MUR.NPC || {}; // object плагина NPC
MUR.NPC.npc_current_id = 0; // Храню свои переменные плагина
MUR.NPC.showText = function (actorName) {
// Функция плагина итд.
}
// Ну и соответственно внутри базовых классов тоже обращение такое:
var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_Game_Interpreter_pluginCommand.call(this, command, args);
MUR.NPC.npc_current_id = 1;
};
Ну как я понимаю в такой конструкции больше обёртка (function() { ... })(); не нужна?