2

与えられた:

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

そのクロージャのから bar メソッドを変更することは可能ですか?

4

1 に答える 1

3

コンストラクター関数 ( ) にアクセスでき、すべてのインスタンスFooをオーバーライドする場合は、新しい値を に割り当てます。barFoo.prototype.bar

のインスタンスがある場合は、そのインスタンスに対してFooのみオーバーライドできます。bar

instance.bar = ...;

または、すべてのインスタンスに対して、ここでもプロトタイプ メソッドをオーバーライドします。このためには、最初にプロトタイプを取得する必要があります。これはObject.getPrototypeOf [MDN]で行うことができます:

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

ただし、これは ES5 メソッドであり、IE <= 8 または Opera では使用できないことに注意してください。


コンストラクタにもインスタンスにもアクセスできない場合、ソース コードを変更する以外にプロパティを変更することはできません。

于 2012-06-21T23:33:15.810 に答える