代码之家  ›  专栏  ›  技术社区  ›  Art

重写JavaScript中的“private”函数

  •  12
  • Art  · 技术社区  · 14 年前

    我正在修补jQuery的一些可拖动代码*。

    其目标是避免修改原始源文件,并动态修补其中一个内部函数。

    函数 _generatePosition

    (function($) {
    
        $.widget("ui.draggable", $.ui.mouse, {
            ...
            _generatePosition: function(event) {
                ...
            }
        }
    })(jQuery);
    

    有没有可能实现动态更换呢?


    here 更多细节。

    3 回复  |  直到 7 年前
        1
  •  11
  •   Jörn Zaefferer    14 年前

    .draggable().data("draggable")._generatePosition = function() {};
    

    或修改原型,影响所有实例:

    $.ui.draggable.prototype._generatePosition = function() {};
    
        2
  •  3
  •   peol    14 年前

    实际上,您可以修改这些元素,但据我所知,只能对基本元素进行修改。但您可以轻松地创建自己的$.fn.draggable包装器,只需调用原始包装器并运行以下命令: draggableElement.data('draggable')._generatePosition = fn

    • 杰恩·扎弗尔 $.ui.draggable.prototype._generatePosition = fn
        3
  •  3
  •   Nick Craver    14 年前

    编辑以下评论: 可以 编辑这些(在最后一个小部件重写之后),但我还是会避开。 Here's an example of the base method ,您可以从那里修改,如果您愿意,但请记住这一点 可能会破裂 在未来的版本中。另外,小部件的任何“继承者”都不会接受这些更改,不确定这是否是一个问题。


    至于原因,拒绝访问并不是真正的原因(在本例中不是)。在这样的图书馆里,与其拒绝你的访问,还不如保持干净, 因为库可能希望稍后更改体系结构,并且在这样做时仍然尽可能少地打断人…允许您只访问其代码的“公共”成员使作者可以更灵活地更改任何“私有”的内容。

    举个例子:jQueryUI1.8将大量代码移到了 position utility