Je vais commencer par un exemple extrait:Portée dans un objet littéral
self.addwidget({
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){
// "this" should reference be "box"
}
}
}),
delay: 3000
});
Description succincte:
ns.box()
prend un objet comme argument et crée une nouvelle jQuery object
. Il utilise jQuery.extend()
pour fusionner l'objet de propriété events
avec le jQuery constructor $('<elem/>', {});
Après cela, ns.box()
renvoie un nouvel objet qui contient certaines méthodes.
-
Ce que je veux archieve est d'avoir accès à ceux propertys/methods
dans le event handlers
. Bien sûr, je ne peux pas accéder à box.somemethod
à ce stade parce que je ne peux pas référencer la propriété box
externe à ce stade. J'ai donc essayé de changer la portée des gestionnaires d'événements avec jQuery.proxy()
, à this
, mais sans succès.
this.somemethod
est non référencé, même si mandaté. J'ai également essayé de remplacer tous les objets par le haut -> vers le bas, sans succès non plus.
Est-il même possible dans une construction comme celle-ci, d'accéder aux propriétés à partir de l'objet retourné de ns.box()
, dans les gestionnaires d'événements?
Faut-il vraiment utiliser le '~~'? Parce que je suis à peu près sûr que quelqu'un viendra et demandera ce que cela veut dire. :) (http://james.padolsey.com/javascript/double-bitwise-not/ si vous êtes l'un d'entre eux) –
@Yi: Je suis désolé, c'est juste une décharge de mon code. Je ne voulais pas confondre qui que ce soit ici. Votre lien devrait clarifier cela, merci. – jAndy
@Yi Jiang: Bon lien, merci. J'aime son affirmation selon laquelle «c'est plus rapide». Il est presque impossible de faire de telles déclarations avec JavaScript, avec la variété des implémentations dans la nature. Ce qui est plus rapide sur IE n'est pas toujours plus rapide sur FF, etc. –