首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript:扩展函数

Javascript:扩展函数
EN

Stack Overflow用户
提问于 2011-01-02 20:48:26
回答 4查看 145.8K关注 0票数 106

我想要它的主要原因是我想扩展我的初始化函数。

如下所示:

代码语言:javascript
复制
// main.js

window.onload = init();
function init(){
     doSomething();
}

// extend.js

function extends init(){
    doSomethingHereToo();
}

所以我想扩展一个函数,就像在PHP中扩展一个类一样。

我也想从其他文件中扩展它,例如,我在main.js中有原始的初始化函数,在extended.js中有扩展函数。

EN

回答 4

Stack Overflow用户

发布于 2011-01-02 20:58:08

有几种方法可以做到这一点,这取决于你的目的是什么,如果你只想在相同的上下文中执行函数,你可以使用.apply()

代码语言:javascript
复制
function init(){
  doSomething();
}
function myFunc(){
  init.apply(this, arguments);
  doSomethingHereToo();
}

如果你想用一个新的init替换它,它看起来应该是这样的:

代码语言:javascript
复制
function init(){
  doSomething();
}
//anytime later
var old_init = init;
init = function() {
  old_init.apply(this, arguments);
  doSomethingHereToo();
};
票数 67
EN

Stack Overflow用户

发布于 2012-09-10 17:22:43

其他方法很棒,但它们不保留任何附加到init的原型函数。为了解决这个问题,你可以做以下事情(灵感来自Nick Craver的帖子)。

代码语言:javascript
复制
(function () {
    var old_prototype = init.prototype;
    var old_init = init;
    init = function () {
        old_init.apply(this, arguments);
        // Do something extra
    };
    init.prototype = old_prototype;
}) ();
票数 6
EN

Stack Overflow用户

发布于 2015-02-06 18:57:48

另一种选择可以是:

代码语言:javascript
复制
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 );
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4578424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档