2010-06-18 60 views
1

考虑下面的代码:困难MooTools的Class.extend

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" 

我有确定为什么在传入的参数“this.parent()”调用“初始化”难度LayoutWidget的功能即将到来通过Widget的初始化函数中的“undefined”。

我正在使用MooTools 1.2.2。有人能够指引我正确的方向吗?

回答

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" 
+0

有趣的是,我看到的所有例子都使用了Class.extend()。这工作虽然,谢谢 – 2010-06-18 12:13:20