Gracias por tu respuesta derkenuke. Tu solución funciona. El tema es que obj en mi clase representa el elemento HTML que se usa para crear el botón (el cual es un elemento de etiqueta img). En mi aplicación, en realidad la variable selected debe corresponder al objeto Button y no al objeto subyacente con el que se crea el botón. Es quizás muy estricto esto que estaba buscando, pero lo he conseguido hacer. Así es como lo logré:
Código:
function Button_constructor ( objid , img_normal , img_mouseover , title )
{
this.objid = objid;
this.root = "Includes/Scripts/TextEditor/Images/";
this.img_normal = img_normal;
this.img_mouseover = img_mouseover;
this.innerObj = document.getElementById(objid);
this.selected = false;
this.innerObj.title = title;
this.innerObj.src = this.root + this.img_normal;
this.innerObj.onmouseover = onmouseover(this);
this.innerObj.onmouseout = onmouseout(this);
function onmouseover(instance)
{
var fn = function(){};
fn = function()
{
change_cursor(this);
if ( !instance.selected )
this.src = instance.root + instance.img_mouseover;
};
return fn;
}
function onmouseout(instance)
{
var fn = function(){};
fn = function()
{
if ( !instance.selected )
this.src = instance.root + instance.img_normal;
};
return fn;
}
function change_cursor(obj)
{
try
{
obj.style.cursor = "pointer"; //MOZILLA
}
catch (ex)
{
obj.style.cursor = "hand"; //IEX
}
}
}
El truco está en pasarle como argumento a la función onmouseover, onmouseout el objeto Button. Pero ese no es todo el truco. Dentro de la función, para que tengamos acceso a la propiedad selected, es necesario encerrar esa instrucción en una nueva función y devolver la función que acabamos de crear. De esta forma, dentro de una función local podemos acceder a la variable pública. Espero que a alguien le sirva. Saludos.