我想扩展Function.prototype
,但是我会称之为Func
的新原型。我想这样做来修改toString
方法。我一直在努力实现这一目标,但我似乎无法想出任何东西。可以这样做,如果是这样,最好的方法是什么?
理想情况下,我想要f = new Func(function () {})
,然后再调用f.toString
来使用我修改后的toString
方法。
答案 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)
关闭这个,我想说唯一的答案就是不要这样做。我能够找到其他方法来实现我的想法。