2011-06-08 74 views
8

這是一個簡單的問題,我知道,我看過谷歌,但找不到太多的幫助。我試圖用我自己的自定義參數創建一個對象,然後在警報中調用其中的一個。Jquery創建對象

無論我嘗試,似乎沒有工作,我知道這是非常簡單的東西,我的appologise!在我的時間裏,我所有其他的JS都非常簡單,並且都是內聯的,因此我現在正在轉向更多的OOP JS。

$.fn.DataBar = function() { 

     $.DataBar.defaultOptions = { 
      class: 'DataBar', 
      text: 'Enter Text Here' 
     } 

     this.greet = function() { 
      alert(this.text); 
     }; 
} 

var q = new $.DataBar(); 
q.greet(); 
+0

當你發生什麼試試'$ .DataBar.greet = function(){'而不是'this.greet = function(){'? – StuperUser 2011-06-08 12:59:04

回答

10
  1. 你不需要fn部分,只需使用:

    $.DataBar = function() { ... }; 
    

    $.fn簡直是jQuery的內部原型參考。因此$.fn.DataBar旨在用作$(selector).DataBar(),而不是$.DataBar()

  2. 您的默認選項未應用於新創建的對象。或者,您也可以定義DataBar的原型greet功能:

    $.DataBar = function() { 
        $.extend(this, $.DataBar.defaultOptions); 
    }; 
    
    $.DataBar.prototype.greet = function() { 
        alert(this.text); 
    }; 
    
    $.DataBar.defaultOptions = { 
        class: 'DataBar', 
        text: 'Enter Text Here' 
    }; 
    
+0

你說過,爲什麼它不需要把DataBar放到「fn」,但爲什麼要把它綁定到「$」呢? – 2011-06-08 13:17:47

+0

@Tim,你不需要;)我假設你希望它以某種方式與jQuery相關,出於命名空間或關聯的原因,所以我將它保留在那裏。 – 2011-06-08 13:20:25

2

有在你的代碼 3問題

  1. 一個後失蹤;默認選項(不會導致錯誤)
  2. this.defaultOptions
  3. 呼叫alert(this.defaultOptions.text)
  4. 實例化添加默認選項的實例與$.fn.DataBar()爲你添加你的類$.fn

下面的代碼工作:

$.fn.DataBar = function() { 

     this.defaultOptions = { 
      class: 'DataBar', 
      text: 'Enter Text Here' 
     }; 

     this.greet = function() { 
      alert(this.defaultOptions.text); 
     }; 
}; 

var q = new $.fn.DataBar(); 
q.greet(); 
+0

不想開始神聖的評論戰,但在JavaScript中不是可選的分號嗎?我喜歡這個博客發佈在這個特定的主題:http://mislav.uniqpath.com/2010/05/semicolons/ – 2011-06-08 13:14:55

+1

你是對的在這一個。但是,如文章中所述,您將得到JSLint驗證的錯誤;-)。但沒關係,我會刪除那個。 – DanielB 2011-06-08 13:17:26

+0

那麼,應該有一個選項:-) – 2011-06-08 13:31:05