为什么我想让一个jQuery UI小部件从它自己继承?

6
自 jQuery 1.9 起,一个小部件可以从自身继承。我找不到一个真实的例子来说明这个功能有什么用处,而且说实话,从自己继承的想法让我感到困惑。这个特性的目的是什么?使用这个特性,我能做些什么之前做不到或者更加困难的事情?
3个回答

2

这是为了重新定义相同的小部件。因此,您可以向其添加新功能,而不需要在另一个对象中扩展它。

在您发送的链接中提供的示例中:

$.widget("ui.dialog", $.ui.dialog, {
    close: function() {
        if (confirm( "Is it closing time?" )) {
            this._super("close");
        }
    }
});

执行上述代码后,每个创建的对话框都会在用户单击关闭按钮时弹出确认消息,如果用户接受,则会关闭。

1

正如在您提供的幻灯片中所说,“这是扩展小部件的理想方式”。

现在,您可以在不创建新的“不同”小部件对象(“不同”意味着“另一个名称”)的情况下扩展小部件。您可以添加功能并仍然使用完全相同的小部件对象名称。

// An incredibly contrived example
$.widget("ui.dialog", $.ui.dialog, {
  close: function() {
    if (confirm( "Is it closing time?" )) {
      this._super("close");
    }
  }
});

正如我们在示例中所看到的,我们可以向对话框对象添加一个功能,该功能将出现在已存在的对话框中,即您无需创建新的“extendedDialog”,然后更改现有代码以使用“extendedDialog”对象。相反,包含的功能已经可用并在那里工作。


JavaScript 没有类 ;) - davidbuzatto
JavaScript也没有继承! :-) - J. Bruni
谢谢你的回答。我之前不知道的关键点是,你可以在不同的源文件中扩展共享小部件,只针对特定的应用程序。有点像 C# 中的部分类。现在完全明白了。 - RationalGeek
它具有原型继承,而非类继承。 - davidbuzatto
我们可以在JavaScript中“发明”类,以及应用程序:http://www.phpied.com/3-ways-to-define-a-javascript-class/ - J. Bruni
显示剩余2条评论

1

这使您拥有类别在Objective-C中的类似功能,您可以向一个类(小部件)添加功能,而无需更改类/小部件代码本身,甚至无需访问其源代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接