2012-10-04 34 views
1

所以,我试图覆盖一个函数,但包含它的原始方法与jQuery.extend()方法。如何使用jQuery.extend()覆盖原函数时引用

var origFunction = $.fn.pluginFunction; 
    $.fn.extend({ 
     pluginFunction: function() { 
       // `origFunction` is available via Closure, 
       // now how can I declare the $.extended function here 
       // to preserve the original methods and then override 
       // only the following object? 

        myObject = { 
         'key1' : 'val1', 
         'key2' : 'val2', 
        } 
     } 
    }); 

回答

2

使用apply()来调用原件。

origFunction.apply(this,arguments); 

但如果myObjectorigFunction内的局部变量,它是不会有所作为。

+0

这不起作用,因为执行'origFunction.apply(this,arguments)'提前执行该函数。我试图调试它,然后添加一个回调函数,以便确保函数在执行之前能够正确地扩展,但应用“origFunction()”实际上是我的问题的根源 - 在调试器中遍历它,它在插件在扩展之前执行的这条线上。 – Brian

+0

它如何过早执行它?没有明白你的意思。 – epascarello

2

修改后的代码:致电origFunction使用apply。只有当它不是方法的私有变量(它应该可以从覆盖方法全局访问)时才更改myObject。

var origFunction = $.fn.pluginFunction; 
    $.fn.extend({ 
     pluginFunction: function() { 
       origFunction.apply(this, arguments); // 
       // `origFunction` is available via Closure, 
       // now how can I declare the $.extended function here 
       // to preserve the original methods and then override 
       // only the following object? 

        myObject = { 
         'key1' : 'val1', 
         'key2' : 'val2', 
        } 
     } 
    }); 
+0

这不起作用,因为执行'origFunction.apply(this,arguments)'提前执行该函数。我试图调试它,然后添加一个回调函数,以便确保函数在执行之前能够正确地扩展,但应用“origFunction()”实际上是我的问题的根源 - 在调试器中遍历它,它在插件在扩展之前执行的这条线上。 – Brian

0

用户申请()

应用调用了一组参数的函数。它不是jQuery的一部分,它是核心Javascript的一部分。然而,在jQuery的文档中提到它:

http://docs.jquery.com/Types#Context.2C_Call_and_Apply

语法:

somefunction.apply(thisobj, argsarray) 

以上调用函数somefunction,将此项设置为函数的范围内thisobj,并传入来自argsarray的参数作为函数的参数。