Javascript 更改私有类方法

Javascript 更改私有类方法,javascript,Javascript,我试图在不改变源代码的情况下改变jquery插件的行为。为了回答这个问题,我构造了一个简单的例子来说明我的问题。如果有一个脚本文件将类实例生成器附加到全局变量,如下所示: (function(){ window.newMyClass = function(){ return new myclass(); } function myclass(){ var privateMethod = function(){ return "private"; }

我试图在不改变源代码的情况下改变jquery插件的行为。为了回答这个问题,我构造了一个简单的例子来说明我的问题。如果有一个脚本文件将类实例生成器附加到全局变量,如下所示:

(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的子类,但由于类实例的设置方式,我不知道如何做到这一点。