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 = ...;