Javascript 如何覆盖闭包中的函数?

Javascript 如何覆盖闭包中的函数?,javascript,jquery,Javascript,Jquery,鉴于: 是否可以从该闭包的外部更改bar方法?如果您可以访问构造函数(Foo),并且希望覆盖所有实例的bar,则可以为Foo.prototype.bar指定一个新值 如果您有一个Foo的实例,您可以仅覆盖该实例的栏: (function() { function Foo() { } $.extend(Foo.prototype, { bar: 'hasBeer' }); }) 或者对于所有实例,再次重写prototype方法。为此,您必须首先获得原型,您可以使用: 但请注意,这是一

鉴于:


是否可以从该闭包的外部更改bar方法?

如果您可以访问构造函数(
Foo
),并且希望覆盖所有实例的
bar
,则可以为
Foo.prototype.bar
指定一个新值

如果您有一个
Foo
实例,您可以仅覆盖该实例的

(function() {
 function Foo() {
 }
 $.extend(Foo.prototype, {
  bar: 'hasBeer'
 });
})
或者对于所有实例,再次重写prototype方法。为此,您必须首先获得原型,您可以使用:


但请注意,这是一种ES5方法,如果您没有访问
Foo
或其实例的权限,则不可用。(
Foo.prototype.bar
只是一个字符串而已;)@FelixKling-我相信我可以访问它。这个例子源于jQuery的ui库(datepicker)。是的,但是如果我想把字符串改成函数呢?我需要知道更多。外部功能是如何使用的?有东西还吗?它是名称空间模式吗?外括号表示自执行,
(function(){…})()但是执行在哪里?太棒了!您提出的第二个建议非常完美,我的结论是:
Object.getPrototypeOf($.ui.datepicker.bar=function(){alert(“beer”);}完全运行了一个烂泥。显然,我将在那里放不同的代码,但它完成了它的工作。
instance.bar = ...;
Object.getPrototypeOf(instance).bar = ...;