La copia del código es la siguiente:
función foo ()
{
}
setInterval ("foo ()", 1000);
Si usa la tecnología OO, puede hacer esto.
La copia del código es la siguiente:
// constructor
función myobj
{
función foo ()
{
alerta (this.data);
}
this.timer = foo;
this.data = "hola";
setInterval ("this.timer ()", 1000);
}
función otro ()
{
// Crear temporizador cuando crea objeto
var obj = new myobj ();
}
Sin embargo, no funciona como piensas. La razón es que la función setInterval () no reconoce esta variable. Un método de solución puede hacer esto.
La copia del código es la siguiente:
función otro ()
{
var obj = nw myobj ();
setInterval ("obj.timer ()", 1000);
}
Obviamente, funciona correctamente, pero si eres un perfeccionista, no estarás contento con eso. Afortunadamente, esta acción se puede poner en el constructor, con un pequeño cambio en la forma.
La copia del código es la siguiente:
// constructor
función myobj
{
función foo ()
{
alerta (this.data);
}
this.timer = foo;
this.data = "hola";
var self = this;
setInterval (function () {self.timer ();}, 1000);
}
función otro ()
{
var obj = new myobj ();
}
Ok, al usar un cierre, está bien. En cuanto a las razones, quiero pensar a los lectores por sí mismos.
Finalmente, da un ejemplo de varios casos de prueba.
La copia del código es la siguiente:
<html>
<Evista>
<title>
Hola temporizador
</title>
<script language = "jscript">
/*
* Hay 3 clases.
*
* 1. El temporizador puede ejecutarse y el resultado está bien
* 2. El temporizador puede ejecutarse y el resultado es incorrecto
* 3. El temporizador no puede ejecutarse
*
*/
función obj ()
{
función foo ()
{
alerta (this.timer);
}
this.timer = foo;
//
var me = esto;
var f = function () {me.timer (); };
var f2 = function () {this.timer (); };
// primera clase
// setInterval (F, 1000);
// tercera clase
// setInterval (F2, 1000);
// 2ª clase
// setInterval (me.timer, 1000);
// setInterval (this.timer, 1000);
// setInterval (foo, 1000);
// tercera clase
// setInterval ("this.timer ()", 1000);
// setInterval ("me.timer ()", 1000);
// setInterval ("foo ()", 1000);
}
var o = nulo;
función onClick ()
{
o = nuevo obj ();
// primera clase
// setInterval ("o.timer ()", 1000);
setInterval (function () {o.timer ();}, 1000);
// 2ª clase
// setInterval (O.Timer, 1000);
}
</script>
</ablo>
<Body>
<input type = "button" onClick = "onClick ()" value = "Click Me"> </input>
</body>
</html>