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 回答