2012-08-28 132 views
2

我想在我的應用程序中創建一個jQuery像體系結構,但我無法得到我的預期結果。jQuery像體系結構

在jQuery中「jQuery對象實際上只是init構造函數的'enhanced''。

jQuery = function(selector, context) { 
    return new jQuery.fn.init(selector, context, rootjQuery); 
}, 

這意味着當你啓動jQuery對象;

$('selector') 

jQuery的返回

new jQuery.fn.init(selector, context, rootjQuery); 

jQuery的原型如下定義;

jQuery.fn = jQuery.prototype = { 
constructor: jQuery, 
init: function(selector, context, rootjQuery) { 
    var match, elem, ret, doc; 
      ... 
      return jQuery.makeArray(selector, this); // An array 
    } 
... 
size: function() { 
    return this.length; 
}, 
... 

jQuery的所有有用屬性和方法(如hide(),show()exct。)都由jQuery對象的原型保存。

而init方法的原型指定爲jQuery的原型;

jQuery.fn.init.prototype = jQuery.fn; 

好吧!我的問題是我試圖使用這種架構,但我無法獲得返回值的屬性和方法。

這是我的代碼;

(function() { 

Metinler = function(MetinKodu){ 
    return new Metinler.sub.baslat(MetinKodu); 
} 



Metinler.sub = Metinler.prototype = { 
    metinKodlari: [], 
    constructor: Metinler, 
    topla: function(){ 
     return this.metinKodlari[0] + this.metinKodlari[1]; 
    }, 
    baslat: function(MetinKodu) { 
     if($.isArray(MetinKodu) && MetinKodu.length > 0) { 

      this.metinKodlari = MetinKodu; 
     }else{ 
      this.metinKodlari = (MetinKodu) ? [MetinKodu] : ['']; 
     } 

     return this.metinKodlari; 
    } 
} 
Metinler.sub.baslat.prototype = Metinler.sub; 

window.Metinler = Metinler; 

})() 

Code

回答

1

你所看到的問題,是你的構造函數返回一個特定的值:

return this.metinKodlari; 

...返回內部數組(以及,你是一個數組的數組)。

刪除此行,您將返回baslat實例。

1

baslat功能故障:

  • 您在MetinKodu.lenght > 0拼錯length
  • 您將返回metinKodlari數組,而您應該返回新創建的this上下文。 jQuery在this上使用makeArray將傳遞的DOM元素存儲在類似數組的jQuery對象中。但是,對於您的情況,只需將傳入的元素存儲在metinKodlari數組中,而不是存儲在this對象本身中。

這應該工作:

baslat: function(MetinKodu) { 
     if ($.isArray(MetinKodu) && MetinKodu.length > 0) { 
      this.metinKodlari = MetinKodu; 
     } else { 
      this.metinKodlari = (MetinKodu) ? [MetinKodu] : ['']; 
     } 
     return this; 
    }