Estoy desarrollando una extensión de Firefox y creo que ahora he llegado a un malentendido básico con respecto a Javascript, con el concepto de 'prototipo' para ser exacto. Consideremos el siguiente ejemplo mínima, notar las diferencias cuando me puse las variables this.demo y this.test:confundido con 'prototype' (extensión de Firefox)
var Example = new Array();
Example.Foo = function() {
this.test = null;
this.demo = "World";
};
Example.Foo.prototype = {
initialize : function(resource) {
this.test = "Hello";
this.display();
},
display : function() {
alert(this.test + " " + this.demo);
},
}
window.addEventListener(
"load",
function() {
window.obj = new Example.Foo();
obj.initialize();
},
false
);
Al abrir Firefox me da la salida esperada:
Hello World
Esto funciona siempre bien presente manera siempre que una llamada muestre() 'dentro' del archivo fuente js. Sin embargo, cuando llamo pantalla() a través correspondiente clic desde una entrada de menú, por ejemplo .:
...
<menupopup id="menu_ToolsPopup">
<menuitem label="Example" oncommand="obj.display();"/>
</menupopup>
...
me sale:
null World
initialize() se ha llamado de antemano, por supuesto.
Todavía soy bastante nuevo en Javascript y trabajo con el código existente. Por lo tanto, estoy bastante confundido con el comportamiento actual. ¿Cuál es la mejor solución para obtener funciona?
Salida estos dos artículos: http://www.javascriptkit.com/javatutors/oopjs2.shtml y http://mckoss.com/jscript/object.htm - su código es una especie de todo el lugar. Una cosa que ayudará mucho, creo, es no usar el nombre 'example' tanto para su definición como para su instancia; es más confuso cuando la mitad de su código está tratando con "ejemplo" esto y "ejemplo" que. Obtenga algunos términos reales allí: lo ayudará a pensar las cosas. –
Si comprueba qué objeto es 'this' al llamar desde el elemento de menú, creo que encontrará que es el elemento de menú y no el objeto que esperaba. – some
Por cierto, las matrices son para cuando las claves son enteros. En este caso use objetos: 'Example = {}'. (Además, incluso cuando necesite una matriz, debe usar '[]' en lugar de una nueva matriz. – hugomg