在JavaScript中扩展`Function`

时间:2014-10-20 21:29:21

标签: javascript function

我想扩展Function.prototype,但是我会称之为Func的新原型。我想这样做来修改toString方法。我一直在努力实现这一目标,但我似乎无法想出任何东西。可以这样做,如果是这样,最好的方法是什么?

理想情况下,我想要f = new Func(function () {}),然后再调用f.toString来使用我修改后的toString方法。

2 个答案:

答案 0 :(得分:0)

对于这个问题我有 为什么?! 的感觉,但你可以这样做:

function Func(f) {
    f.toString = Func$toString;
    return f;
}

...其中Func$toString是您的toString实施。

示例:



function Func$toString() {
  return "Special! " + Function.prototype.toString.call(this);
}
function Func(f) {
  f.toString = Func$toString;
  return f;
}

var f = new Func(function () {});
display(f); // "Special! function () {}"

function display(msg) {
  var p = document.createElement('p');
  p.innerHTML = String(msg);
  document.body.appendChild(p);
}





或者,当然,如果您感觉真的很大胆,只需替换Function.prototype.toString



var oldToString = Function.prototype.toString;
Function.prototype.toString = function() {
  return "Special! " + oldToString.call(this);
};

var f = function () {};
display(f); // "Special! function () {}"

function display(msg) {
  var p = document.createElement('p');
  p.innerHTML = String(msg);
  document.body.appendChild(p);
}




答案 1 :(得分:0)

关闭这个,我想说唯一的答案就是不要这样做。我能够找到其他方法来实现我的想法。