【问题标题】:Extending existing jQuery plugin扩展现有的 jQuery 插件
【发布时间】:2011-03-22 14:35:47
【问题描述】:

我有一个现有的 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
            }

我不想更改现有的插件,你能告诉我如何通过扩展或制作我自己的自定义插件来实现相同的效果吗?

【问题讨论】:

  • 关于在不改变插件的情况下进行扩展的难度的信息,请参阅this question

标签: jquery plugins jquery-plugins


【解决方案1】:

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

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

【讨论】:

  • 你能不能解释一下“或者用一个abc函数的选项扩展这个”,我不想碰现有的插件。
  • @Rocky Singh - 由于插件的编写方式,我看不到解决办法。你需要自己写,或者找一个不同的插件。
【解决方案2】:

想想你要找的是jQuery extend

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2010-11-12
    • 2010-12-25
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 2012-02-06
    相关资源
    最近更新 更多