为什么我希望jQueryUI小部件从自身继承?

为什么我希望jQueryUI小部件从自身继承?,jquery,jquery-ui,Jquery,Jquery Ui,从jQuery 1.9开始。我找不到一个真实世界的例子来说明为什么这会有用,坦率地说,从自己身上继承的想法打破了我的头脑。此功能的目的是什么?使用此功能我能做什么?以前我做不到,或者以前要困难得多?原因是要重新定义相同的小部件。因此,您可以向它添加新功能,而不需要在另一个对象中扩展它 在您发送的链接中显示的示例中: $.widget("ui.dialog", $.ui.dialog, { close: function() { if (confirm( "Is it cl

从jQuery 1.9开始。我找不到一个真实世界的例子来说明为什么这会有用,坦率地说,从自己身上继承的想法打破了我的头脑。此功能的目的是什么?使用此功能我能做什么?以前我做不到,或者以前要困难得多?

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

在您发送的链接中显示的示例中:

$.widget("ui.dialog", $.ui.dialog, {
    close: function() {
        if (confirm( "Is it closing time?" )) {
            this._super("close");
        }
    }
});
执行上述代码后,当用户单击“关闭”按钮时,创建的每个对话框都会弹出确认消息,如果用户接受该按钮,则该对话框将关闭。

如前所述,这是扩展小部件的理想方式

现在,您可以扩展一个小部件,而无需创建新的“不同”小部件对象(“不同”表示“另一个名称”)。您可以添加一个功能,但仍然使用相同的小部件对象名称

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

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

这为您提供了类似于objective-c中类别的功能,您可以向类(小部件)添加功能,而无需更改类/小部件代码本身,甚至可以访问其源代码。

JavaScript没有类;)JavaScript也没有继承性!:-)谢谢你的回答。我缺少的关键一点是,您可以在不同的源文件中仅为特定的应用程序扩展共享小部件。有点像C#中的部分类。现在已经非常合理了。它有原型继承,而不是类继承。我们可以用JavaScript“发明”类和应用程序: