Javascript 更改私有类方法
我试图在不改变源代码的情况下改变jquery插件的行为。为了回答这个问题,我构造了一个简单的例子来说明我的问题。如果有一个脚本文件将类实例生成器附加到全局变量,如下所示:Javascript 更改私有类方法,javascript,Javascript,我试图在不改变源代码的情况下改变jquery插件的行为。为了回答这个问题,我构造了一个简单的例子来说明我的问题。如果有一个脚本文件将类实例生成器附加到全局变量,如下所示: (function(){ window.newMyClass = function(){ return new myclass(); } function myclass(){ var privateMethod = function(){ return "private"; }
(function(){
window.newMyClass = function(){
return new myclass();
}
function myclass(){
var privateMethod = function(){
return "private";
}
this.publicMethod = function(){
return privateMethod();
}
}
})()
如果我随后使用var instance=window.newMyClass获得myclass的新实例,是否有任何方法可以重写实例上privateMethod的行为,例如instance.publicMethod将调用我被重写的函数?我想我可以将myclass子类化,但是由于myclass构造函数的作用域是立即调用的函数表达式,所以我不知道如何做到这一点
仅仅更改插件源代码是否更好?问题是,我必须自己托管它,而不是使用CDN,并且在每次发布更新时重新实现更改。我不知道我是否理解这一点。可能不会,因为这一点并不含糊:
(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:你唯一能做的就是重写publicMethod。它们被称为私有方法是有原因的。也许可以解释一下你做了什么?为什么呢?我需要改变privateMethod的实现,因为它在整个类中都被调用,而不仅仅是在publicMethod中。我包括了publicMethod,只是作为我想要的结束行为的一个例子-publicMethod返回我被重写的privateMethod函数。所以这就是重写一个私有的不可访问的方法。我建议标题是:从类的实例更改私有类方法,扩展类怎么样?是的。通常我会用重写的方法创建myclass的子类,但由于类实例的设置方式,我不知道如何做到这一点。