2015-03-02 64 views
0

您好我有我无法触及的基于jQuery的核心代码。它包含一个功能例如:如何覆盖封装的函数(jQuery)

Library.Plugin.init = function (param1, param2) { 
    function doSomething(paramA, paramB, paramC) { 
    } 
}; 

Library &插件只是对象容器。

我想改变doSomething()函数的某些部分,同时保持其他部分正常工作。 (我认为它被称为覆盖)

我该如何实现它?

预先感谢您

+1

打开你最喜欢的编辑器,找到'doSomething()'函数,然后改变它。由于它是在'init'函数内部本地定义的,因此不能在代码中的其他地方以编程方式随机更改它。 – adeneo 2015-03-02 15:50:51

+0

'函数doSomething'是'private'it意味着你不能覆盖它。 你将不得不编辑自己的插件代码本身的'函数doSomething' – sabotero 2015-03-02 15:50:53

+0

谢谢大家澄清。 'init'函数在任何方面都是特殊的吗? – krajicek 2015-03-03 11:23:29

回答

0

你不能改变doSomething本身,但你可以通过安排其分支,内部控制其行为。

例如,开关/壳体结构,该结构取决于函数的paramters的一个(或多个):

function doSomething(a, b, c) { 
    switch (a) { 
     case 0: 
      ... 
     break; 
     case 1: 
      ... 
     break; 
     case 2: 
      ... 
     break; 
     default: 
      ... 
    } 
} 

因此,doSomething将完全由Library.Plugin.init控制。

function doSomething(a, b, c) { 
    switch (outerObject.state) { 
     case 0: 
      ... 
     break; 
     case 1: 
      ... 
     break; 
     case 2: 
      ... 
     break; 
     default: 
      ... 
    } 
} 

这里,doSomething将由Library.Plugin.init相对于正规的婴儿车a, b, c确定,也可由任何其他代码控制有力量:

你可以同样在一些外部对象的状态分支更改outerObject.state

这些只是例子。可能性的范围是无止境的。你主要受限于你的想象力。