Javascript: Cómo acceder a un atributo de clase desde una función dentro de una de las funciones de la clase
-
06-07-2019 - |
Pregunta
Dentro de una determinada función de una clase, necesito usar setInterval
para interrumpir la ejecución del código. Sin embargo, dentro de la función setInterval
, " this " ya no se refiere a la clase "myObject". ¿Cómo puedo acceder a la variable " nombre " desde dentro de la función setInterval
?
function myObject() {
this.name = "the name";
}
myObject.prototype.getName = function() {
return this.name;
}
myObject.prototype.test = function() {
// this works
alert(this.name);
var intervalId = setInterval(function() {
// this does not work
alert(this.name);
clearInterval(intervalId);
},0);
}
Solución
myObject.prototype.test = function() {
// this works
alert(this.name);
var oThis = this;
var intervalId = setInterval(function() {
// this does not work
alert(oThis.name);
clearInterval(intervalId);
},0);
}
Esto debería funcionar. La función anónima '' esto '' no es lo mismo " esto " como su myObject's " this. "
Otros consejos
Aquí está la función de enlace del prototipo
Function.prototype.bind = function( obj ) {
var _this = this;
return function() {
return _this.apply( obj, arguments );
}
}
Para esto sirve el enlace en Prototype:
function myObject() {
this.name = "the name";
}
myObject.prototype.getName = function() {
return this.name;
}
myObject.prototype.test = function() {
// this works
alert(this.name);
var intervalId = setInterval(function() {
// this does not work
alert(this.name);
clearInterval(intervalId);
}.bind(this),0);
}
Tenga en cuenta que la respuesta de s13james está incompleta porque bind ()
no es una característica estándar y debe proporcionarse en otro lugar: una forma es usar el marco de prototype.js Javascript, mientras que otra será hacer usted mismo usando el ejemplo de código de meouw.
Si no usa bind ()
(que es ingenioso, debo decir), entonces la respuesta de djangel es lo que podría haber hecho, y es lo que hago con más frecuencia.