перепутал с «прототипом» (расширение Firefox)

Я разрабатываю расширение для firefox, и я думаю, что сейчас обнаружил базовое недоразумение в отношении Javascript, а точнее, концепции «прототипа». Рассмотрим следующий минимальный пример, обратите внимание на различия, когда я устанавливаю переменные this.demo и this.test:

  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
  );

При открытии Firefox я получаю ожидаемый результат:

  Hello World

Это всегда хорошо работает, пока отображается вызов ( ) 'внутри' исходного файла js. Однако, когда я вызываю display () с помощью соответствующего щелчка мышью в пункте меню, например: [

...
    <menupopup id="menu_ToolsPopup">
      <menuitem label="Example" oncommand="obj.display();"/>
    </menupopup>
...

], я получаю:

  null World

initialize (), конечно, был вызван заранее.

Я все еще новичок в Javascript и работаю с существующим кодом. Поэтому меня смущает текущее поведение. Какое лучшее решение для получения работает?

7
задан Lightness Races with Monica 10 November 2011 в 14:51
поделиться