2014-12-13 71 views
0

我正在嘗試更改jquery插件的行爲而不實際更改源代碼。爲了這個問題的目的,我構建了一個簡單的例子來說明我的問題。如果有附加一個類的實例發生像這樣的全局變量腳本文件:更改私人課程方法

(function(){ 

window.newMyClass = function(){ 
    return new myclass(); 
} 

function myclass(){ 
    var privateMethod = function(){ 
     return "private"; 
    } 
    this.publicMethod = function(){ 
     return privateMethod(); 
    } 
} 
})() 

如果我再拿到的MyClass新實例var instance = window.newMyClass(),有沒有什麼辦法來覆蓋對instanceprivateMethod的行爲,例如instance.publicMethod()會調用我的重寫函數?我在想我可以繼承myclass,但由於myclass構造函數的作用域是立即調用的函數表達式,我不知道該怎麼做。

更改插件源更好嗎?問題在於我必須自己託管它,而不是使用CDN,並且每次發佈更新時都要重新實施更改。

+0

你能做的唯一的事情就是覆蓋'publicMethod'。 – 2014-12-13 01:23:03

+0

他們被稱爲「私人」的方法是有原因的。 – 2014-12-13 06:14:59

回答

0

我不知道我是否明白這一點。或許不會,因爲沒有謎與:

(function(){ 

window.newMyClass = function(){ 
    return new myclass() 
} 

function myclass(){ 
    var privateMethod = function(){ 
     return "private"; 
    } 
    this.publicMethod = function(){ 
     return privateMethod(); 
    } 
} 
})(); 

var instance = window.newMyClass(); 

instance.publicMethod = function(){ 
     return "new method"; 
} 

console.log(instance.publicMethod()); 

FIDDLE:http://jsfiddle.net/r9evbzd2/1/

+0

也許解釋你做了什麼?爲什麼? – 2014-12-13 01:24:57

+0

我需要更改privateMethod的實現,因爲它在整個類中調用,而不僅僅是在publicMethod中調用。我僅僅將publicMethod作爲我想要的最終行爲的示例 - publicMethod返回我重寫的privateMethod函數。 – noachr 2014-12-13 01:25:21

+0

所以這是關於重寫一個私人(不可訪問)的方法。我建議標題:**從類的實例中更改私有類方法** – Verhaeren 2014-12-13 01:27:47