考慮:如何覆蓋封閉內的函數?
(function() {
function Foo() {
}
$.extend(Foo.prototype, {
bar: 'hasBeer'
});
})
是否有可能改變從的杆法之外的封閉?
考慮:如何覆蓋封閉內的函數?
(function() {
function Foo() {
}
$.extend(Foo.prototype, {
bar: 'hasBeer'
});
})
是否有可能改變從的杆法之外的封閉?
如果你有機會到構造函數(Foo
),並要覆蓋bar
所有實例,你一個新的值賦給Foo.prototype.bar
。
如果你有的Foo
的例如,你可以只覆蓋bar
該實例:
instance.bar = ...;
或所有實例通過,再次重寫原型方法。對於這一點,你必須先拿到樣機,您可以與Object.getPrototypeOf
[MDN]做到:
Object.getPrototypeOf(instance).bar = ...;
但是請注意,這是一個ES5方法不可用IE < = 8或者Opera。
如果您既不能訪問構造函數,也不能訪問實例,除了通過修改源代碼之外,不能更改屬性。
太棒了!你提出的第二個建議是完美的,我最終得到了這個:'Object.getPrototypeOf($。ui.datepicker).bar = function(){alert(「beer」); };'完全跑了一堆。很明顯,我會在那裏放置不同的代碼,但它的工作。 –
如果您無法訪問'Foo'或其實例,請不要使用。 ('Foo.prototype.bar'只是一個字符串順便說一句;)) –
@FelixKling - 我有權訪問它,我相信。這個例子源於jQuery的ui庫(datepicker)。是的,但如果我想將字符串更改爲函數呢? –
需要了解更多信息。如何使用外部功能?什麼都返回了?它是一個名稱空間模式嗎?外括號表示自我執行,'(function(){...})();'但執行的地方在哪裏? –