如何覆盖闭包内的函数?

时间:2012-06-21 23:24:57

标签: javascript jquery

假设:

(function() {
 function Foo() {
 }
 $.extend(Foo.prototype, {
  bar: 'hasBeer'
 });
})

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

1 个答案:

答案 0 :(得分:3)

如果您有权访问构造函数(Foo)并且想要覆盖所有实例的bar,则可以为Foo.prototype.bar分配一个新值。

如果您拥有Foo实例,则只能覆盖该实例的bar

instance.bar = ...;

或者再次覆盖原型方法的所有实例。为此,您必须首先获得原型,您可以使用Object.getPrototypeOf [MDN]

Object.getPrototypeOf(instance).bar = ...;

但请注意,这是一个ES5方法,不适用于IE< = 8或Opera。


如果您既无法访问构造函数也无法访问实例,除了修改源代码之外,您无法更改属性。