2011-06-08 62 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