假设:
(function() {
function Foo() {
}
$.extend(Foo.prototype, {
bar: 'hasBeer'
});
})
是否可以从该闭包的外部更改bar方法?
答案 0 :(得分:3)
如果您有权访问构造函数(Foo
)并且想要覆盖所有实例的bar
,则可以为Foo.prototype.bar
分配一个新值。
如果您拥有Foo
的实例,则只能覆盖该实例的bar
:
instance.bar = ...;
或者再次覆盖原型方法的所有实例。为此,您必须首先获得原型,您可以使用Object.getPrototypeOf
[MDN]:
Object.getPrototypeOf(instance).bar = ...;
但请注意,这是一个ES5方法,不适用于IE< = 8或Opera。
如果您既无法访问构造函数也无法访问实例,除了修改源代码之外,您无法更改属性。