JS Delegate

Pra quem conhece a Delegate do Flash, e sabe de sua importância e grande utilização, vai apreciar, a minha versão para JS:

JavaScript:
  1. Delegate = {<br />
  2. version: "1.0"<br />
  3. }<br />
  4. Delegate.create = function(obj, func, args){<br />
  5. var f = function(){<br />
  6. var target = arguments.callee.target;<br />
  7. var func = arguments.callee.func;<br />
  8. var args = arguments.callee.args;<br />
  9. return func.apply(target, (args.length <1 ? arguments : args));<br />
  10. };<br />
  11. f.args = (args != undefined &#038;& args.length> 0 ? args : new Array());<br />
  12. f.target = obj;<br />
  13. f.func = func;<br />
  14. return f;<br />
  15. }<br />

Funciona igualzim:

JavaScript:
  1. window.teste = "Dae?";<br />
  2. document.getElementById("seuBotao").onclick = Delegate.create(window, function(){alert(this.teste)});<br />

Abracetas... ;)

4 Comments

rssComments RSS transmitTrackBack Identifier URI


Não querendo ser chato mais não saquei pra q serve essa parada ....
e tipo se ta numa onda agora de transformar o js em flash :D???

Comment by Diego RC on 18/01/2006 1:37 am


Parabéns seu loco, parada interessante essa...funfa em todos os browsers e tudo :D

diego, assim como no falsh, essa função delegate permite que vc execute comandos com mais praticidade (por exemplo, no flash, c pode colocar listeners sem usar listeners usando ela) :D

pena que essa classe no flash nao é documentad :(

Comment by superJg on 20/01/2006 4:35 pm


hum viva as classes não documentadas... uma pergunta basica pra qualquer um dos dois como q vcs acham essas classes e consegue informação dela se nem documentada ela é?

Comment by Diego on 25/01/2006 5:17 pm


Hi , i was searching how to create a delegate function in js, and you just did it. I was testing it with setInterval, it works, except in Internet Explorer.

// This will send the arguments to my function o.front
// Test 1
var i = setInterval(Delegate.create(o,o.front,['aaaaaaaaaa','ddddddddd']),1000);

// This will not. This work in Firfox, Netscape, Opera.
// Test 2
var i = setInterval(Delegate.create(o,o.front),2000,'aaaaaaaaaa','ddddddddd');

I really want to use the method of Test 2 but want to know why it does not work in internet explorer.

Thx

Comment by SimonBoris on 08/06/2006 9:36 am

addLeave a comment