【问题标题】:Jquery create objectjQuery创建对象
【发布时间】:2011-06-08 12:56:43
【问题描述】:

这是一个我知道的简单问题,我在 google 上查看过,但找不到太多帮助。我正在尝试使用我自己的自定义参数创建一个对象,然后在警报中调用其中一个。

无论我尝试什么,似乎都不起作用,我知道这是非常简单的东西,我很抱歉!在我的时间里,我所有的其他 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();

【问题讨论】:

  • 当您尝试使用$.DataBar.greet = function(){ 而不是this.greet = function() { 时会发生什么?

标签: javascript jquery function object


【解决方案1】:
  1. 您不需要fn 部分,只需使用:

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

    $.fn 只是对 jQuery 内部 prototype 的引用。所以$.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'
    };
    

【讨论】:

  • 你描述了,为什么不需要将DataBar绑定到“fn”,但为什么要绑定到“$”呢?
  • @Tim,你不必这样做;)我假设你希望它以某种方式与 jQuery 相关,出于命名空间或关联的原因,所以我把它放在那里。
【解决方案2】:

您的代码中有 4 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();

【讨论】:

  • 不想引发一场神圣的评论大战,但分号在 JavaScript 中不是可选的吗?我喜欢这篇关于这个特定主题的博文:mislav.uniqpath.com/2010/05/semicolons
  • 你是对的。但是你会得到错误,如文章中所说的 JSLint 验证;-)。不过好吧,我会删除那个。
  • 嗯,应该有一个选项:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多