2010-09-14 59 views
0

這是一個基本問題。抱歉。關於初始化器的簡單問題

我有以下代碼:

$extend(ImageCrop, Options.prototype); 
Swiff.Uploader = new Class({ 
    Extends: Swiff, 
    Implements: Events, 
    options: { 
     path: "Swiff.Uploader.swf", 
     target: null, 
     zIndex: 9999, 
     height: 30, 
     width: 100, 
     callBacks: null, 
     params: { 
      wMode: "opaque", 
      menu: "false", 
      allowScriptAccess: "always" 
     }, 
     typeFilter: null, 
     multiple: true, 
     queued: true, 
     verbose: false, 
     url: null, 
     method: null, 
     data: null, 
     mergeData: true, 
     fieldName: null, 
     fileSizeMin: 1, 
     fileSizeMax: null, 
     allowDuplicates: false, 
     buttonImage: null, 
     policyFile: null, 
     fileListMax: 0, 
     fileListSizeMax: 0, 
     instantStart: false, 
     appendCookieData: false, 
     fileClass: null 
    }, 
    initialize: function (b) { 
     this.addEvent("load", this.initializeSwiff, true).addEvent("select", this.processFiles, true).addEvent("complete", this.update, true).addEvent("fileRemove", function (e) { 
      this.fileList.erase(e) 
     } .bind(this), true); 
     this.setOptions(b); 
     if (this.options.callBacks) { 
      Hash.each(this.options.callBacks, function (f, e) { 
       this.addEvent(e, f) 
      }, this) 
     } 
     this.options.callBacks = { 
      fireCallback: this.fireCallback.bind(this) 
     }; 
     var d = this.options.path; 
     if (!d.contains("?")) { 
      d += "?noCache=" + $time() 
     } 
............................... 

,當我在this.setOptions(b);設置斷點,看b varible的價值我看到已經初始化varible但爲什麼呢?我在哪裏設定b值?我只是將它作爲參數傳遞。我認爲b的價值必須是'空'或什麼的。

+1

是MooTools的''類構造函數嗎? – CMS 2010-09-14 20:23:43

+0

@CMS是的。我想是這樣。 – Neir0 2010-09-14 20:34:51

回答

1

當你使用Options類作爲一個mixin時,它所做的只是一個$merge()this.options,其參數在this.setOptions()上傳遞。 initialize作爲構造函數,並且mootools中的常規做法是將選項對象傳遞給它。

這裏是一個例子類:

var foo = new Class({ 
    Implements: [Options], 
    // set defaults. 
    options: { 
     foo: "bar", 
     log: true   
    }, 
    initialize: function(options) { 
     this.report(); // "bar" 
     this.setOptions(options); // merge argument options with this.options 
     this.report(); // whatever the value of options.foo was 
    }, 
    report: function() { 
     if (this.options.log) 
      console.log(this.options.foo); 
    } 

}); 

// this will output bar and then test. 
new foo({foo:"test"}).report(); 

它允許您使用設置/數據的實例可以覆蓋默認填充您的類的實例。例如,您也可以通過new foo({log: false});來抑制所有輸出。

0

如果您在該方法中設置了斷點,那麼在您運行該方法之前它不會被命中,即不是在解析定義時,而是在創建對象時。此時,如果設置了b,您可能會傳遞參數。 所以,換句話說:當你定義你的上傳器時,斷點不會被命中。稍後創建實例時會觸發它。