2010-06-18 88 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