2015-03-02 105 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

這些只是例子。可能性的範圍是無止境的。你主要受限於你的想象力。