我想要它的主要原因是我想扩展我的初始化函数。
如下所示:
// main.js
window.onload = init();
function init(){
doSomething();
}
// extend.js
function extends init(){
doSomethingHereToo();
}
所以我想扩展一个函数,就像在PHP中扩展一个类一样。
我也想从其他文件中扩展它,例如,我在main.js
中有原始的初始化函数,在extended.js
中有扩展函数。
发布于 2011-01-02 20:58:08
有几种方法可以做到这一点,这取决于你的目的是什么,如果你只想在相同的上下文中执行函数,你可以使用.apply()
function init(){
doSomething();
}
function myFunc(){
init.apply(this, arguments);
doSomethingHereToo();
}
如果你想用一个新的init
替换它,它看起来应该是这样的:
function init(){
doSomething();
}
//anytime later
var old_init = init;
init = function() {
old_init.apply(this, arguments);
doSomethingHereToo();
};
发布于 2012-09-10 17:22:43
其他方法很棒,但它们不保留任何附加到init的原型函数。为了解决这个问题,你可以做以下事情(灵感来自Nick Craver的帖子)。
(function () {
var old_prototype = init.prototype;
var old_init = init;
init = function () {
old_init.apply(this, arguments);
// Do something extra
};
init.prototype = old_prototype;
}) ();
发布于 2015-02-06 18:57:48
另一种选择可以是:
var initial = function() {
console.log( 'initial function!' );
}
var iWantToExecuteThisOneToo = function () {
console.log( 'the other function that i wanted to execute!' );
}
function extendFunction( oldOne, newOne ) {
return (function() {
oldOne();
newOne();
})();
}
var extendedFunction = extendFunction( initial, iWantToExecuteThisOneToo );
https://stackoverflow.com/questions/4578424
复制相似问题