2011-03-22 69 views
0

我有一个现有的jQuery插件,现在我想扩展它。考虑下面提到的插件:扩展现有的jQuery插件

$.fn.x = function(option) { 
     var defaults = { 
      a: 1, 
      b: 2 
     }; 

     option = $.extend(def, option); 
     function abc() { 
      //do something 
     } 
     function def() { 
      //do something 
     } 
    }; 

现在上面的是我从某处获得的插件。我需要有ABC法定制行为,说

function abc() { 
       //do something else 
      } 

我不想改变现有的插件,你可以告诉我,我怎么能达到同样通过延长相同或使自己的自定义插件?

+1

有关不改变插件扩展的难度信息,请参见该问题(HTTP://计算器。 COM /问题/ 2050985 /最佳方式对延长-A-jQuery的插件)。 – justkt 2011-03-22 14:37:22

回答

1

您将无法在此特定情况下替换/重写该方法,因为它被声明为局部变量。最好的解决方案是编写自己的插件,或者使用abc函数的选项来扩展这个插件。 事情是这样的:

function abc() { 
    if(!!option.abc){ 
     return option.abc.call(this);  
    } 
    alert('old abc'); 
} 
+0

您能否请您解释“或者扩展这个带有abc功能的选项”,我不想去碰现有的插件。 – 2011-03-22 15:22:46

+0

@Rocky Singh - 由于插件是如何编写的,我没有看到解决方法。你需要编写你自己的,或者找到一个不同的插件。 – 2011-03-22 15:41:29

0

认为你在寻找什么是jQuery extend

newFunctionality = { 
    abc: function(){ 
     alert('yo'); 
    } 
} 

$.extend($.fn.x, newFunctionality); 
$.fn.x.abc() #=> 'yo' 
+0

这不起作用。这些函数在本地范围内。 – 2011-03-22 14:58:49