覆盖javascript函数(Drupal中的Superfish)

时间:2013-07-23 18:52:38

标签: javascript

这是Superfish library used in Drupal。第102行的superfish.js文件包含代码:

$.fn.extend({
    hideSuperfishUl : function(){
        /* some statements */
    },
    showSuperfishUl : function(){
        /* some statements */
    }
});

我需要覆盖这两个功能。 怎么做?(我不是故意在Drupal中如何做,而是在javascript中如何做)

P.S。根据一些信息,我尝试在我自己的脚本中添加此代码:

(function ($) {
  var orig_hideSuperfishUl = $.hideSuperfishUl;
    $.hideSuperfishUl = function(){
      alert('lol');
    }
})(jQuery);

Firebug显示以" var"开头的语句刷新页面后运行,但是使用" alert"不运行。相反,原始的hideSuperfishUl函数会运行。

[编辑1] 我将自定义代码更改为:

(function ($) {
  //var orig_hideSuperfishUl = $.hideSuperfishUl;
  var hideSuperfishUl = function(){
    alert('lol');
  }
})(jQuery);

[编辑2] 我添加了4个断点:

  1. 在第102行的superfish.js中,代码为$.fn.extend({
  2. 在第106行的superfish.js中,代码为o.retainPath = false;
  3. 在我的脚本中与var hideSuperfishUl = function(){
  4. 一致
  5. 在我的脚本中与alert('lol');
  6. 一致

    刷新页面后,断点1处的代码先运行,然后处于断点3.运行鼠标开启和关闭菜单后,断点2处的代码运行。未达到断点4。

    断点1处的调用堆栈只有两个匿名函数(第一个是带有jQuery参数的最外层函数,第二个是断点)。断点3处的调用堆栈非常相似。

2 个答案:

答案 0 :(得分:1)

有效覆盖相关功能的代码是:

$.fn.hideSuperfishUl = function(){(...)}

答案 1 :(得分:0)

你正在做什么

var orig_hideSuperfishUl = $.hideSuperfishUl;

将函数分配给新变量,该变量不会影响原始变量。

尝试简单地重新定义原文:

var hideSuperfishUl = '';

var hideSuperfishUl = function() {...}