2

鉴于:

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

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

4

1 回答 1

3

如果您有权访问构造函数 ( Foo) 并且想要覆盖bar所有实例,则将新值分配给Foo.prototype.bar.

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

instance.bar = ...;

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

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

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


如果您既无权访问构造函数,也无权访问实例,则无法更改属性,只能修改源代码。

于 2012-06-21T23:33:15.810 回答