Этого можно достичь с помощью функции определения объема, например:
self.addwidget((function() {
var box = ns.box({
text: 'Foobar',
fromTop: ~~(Math.random()*window.innerHeight),
fromLeft: ~~(Math.random()*window.innerWidth),
toTop: 240,
toLeft: 40,
css: 'foobar',
easing: 'easeOutCirc',
duration: 2000,
events: {
mousedown: function(e){
e.target.position = {x: e.pageX, y: e.pageY};
},
mouseup: function(e){
// You can access `box` here
}
}
});
return {
box: box,
delay: 3000
};
})());
Назначая поле для переменной внутри нашей функции определения масштаба, мы создаем символ, к которому обработчики событий (которые замыкания ) закрываются и, таким образом, имеют доступ к нему. Мы немедленно вызываем функцию, чтобы она возвращала объект. Ссылки, удерживаемые закрытиями, являются постоянными, и поэтому ...
Я использую этот шаблон все время, потому что мне не нравятся анонимные функции (например, ваши обработчики событий анонимны); больше здесь . Если бы я делал вышеупомянутое, я бы назвал их так:
self.addwidget((function() {
var box = ns.box({
text: 'Foobar',
fromTop: ~~(Math.random()*window.innerHeight),
fromLeft: ~~(Math.random()*window.innerWidth),
toTop: 240,
toLeft: 40,
css: 'foobar',
easing: 'easeOutCirc',
duration: 2000,
events: {
mousedown: boxMousedown,
mouseup: boxMouseup
}
});
function boxMousedown(e){
e.target.position = {x: e.pageX, y: e.pageY};
}
function boxMouseup(e){
// You can access `box` here
}
return {
box: box,
delay: 3000
};
})());
Эти функции теперь имеют имена, которые могут отображаться в стеках вызовов и сообщениях об ошибках, но они полностью закрыты , не загромождая глобальное пространство имен.