1

次のコードを検討してください。

var Widget = new Class({
       Implements: [Options],
       options: {
          "name" : "BaseWidget"
       },
       initialize: function(options) {
          alert("Options are: " + JSON.stringify(options)); //alerts "Options are: undefined"
          this.setOptions(options);
          alert("My options are: " + JSON.stringify(this.options)); //alerts "My options are: { 'name' : 'BaseWidget' }"
       },
       getName: function() {
          return this.options.name;   
       }
});

var LayoutWidget = Widget.extend({    
       initialize: function() {
          this.parent({ "name" : "Layout" });
       }
});

alert(new LayoutWidget().getName()); //alerts "BaseWidget"

LayoutWidget の「initialize」関数の「this.parent()」呼び出しで渡された引数が、Widget の初期化関数で「未定義」として渡される理由を特定するのが困難です。

MooTools 1.2.2 を使用しています。誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

2

これを確認してください:http://www.jsfiddle.net/F4hTS/

わずかなフォルムの違い。

var Widget = new Class({
    Implements: [Options],
    options: {
        "name" : "BaseWidget"
    },
    initialize: function(options) {
        alert("Options are: " + JSON.stringify(options)); //alerts "Options are: undefined"
        this.setOptions(options);
        alert("My options are: " + JSON.stringify(this.options)); //alerts "My options are: { 'name' : 'BaseWidget' }"
    },
    getName: function() {
        return this.options.name;   
    }
});

Widget.LayoutWidget = new Class({   
    Extends: Widget,
    initialize: function(options) {
        this.parent(options);
    }
});

alert(new Widget.LayoutWidget({ "name" : "Layout" }).getName()); //alerts "Layout"
于 2010-06-18T08:00:04.597 に答える