如何重新定义JS函数保持前一个链

时间:2011-08-03 02:21:43

标签: javascript

这是来自面向对象编程的常见任务,我想通过覆盖现有函数来改变JavaScript程序的行为,也可以调用它。我记得Windows介绍过写钩子和链接它们。所以我想要的是,我有一个网页,它调用一些onload hook,最后调用函数initFields。我想重新定义此函数,但请保留以前的实现。如果我只是将我的JS函数定义为

function initFields() {
  // do some stuff ...
   // I do not know how to call super.initFields() here
}

我读过你可以写的东西

initFields.prototype = function() {
     // do some stuff ...
     // but still have no idea how to call the original one
 };

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:6)

一个选项是

var initFieldsInitial = initFields;
function initFields() {
   // your stuff
   initFieldsInitial.apply(this, arguments);
}

答案 1 :(得分:2)

您可以尝试使用underscore.js库中的wrap()函数。

http://documentcloud.github.com/underscore/#wrap

var initFields = function() {
    // do something
    console.log('initFields');
}

initFields = _.wrap(initFields, function(initial) {
    // do some stuff
    console.log('wrapper');
    initial();
});

$(document).ready(function() {
    initFields();
});