我想扩展Function.prototype
,但在一个新的原型上,我将其称为Func
。我想要这样做来修改toString
方法。我一直在尝试一些东西来实现这一点,但我似乎无法提出任何事情。这可以做到吗,如果是这样,那么最好的办法是什么?在JavaScript中扩展`Function`
理想情况下,我想先做f = new Func(function() {})
,然后再拨打f.toString
来使用我的修改toString
方法。
我想扩展Function.prototype
,但在一个新的原型上,我将其称为Func
。我想要这样做来修改toString
方法。我一直在尝试一些东西来实现这一点,但我似乎无法提出任何事情。这可以做到吗,如果是这样,那么最好的办法是什么?在JavaScript中扩展`Function`
理想情况下,我想先做f = new Func(function() {})
,然后再拨打f.toString
来使用我的修改toString
方法。
只是为了关闭这个,我会说唯一的答案就是不要这样做。我能够找到其他方法来实现我的想法。
我有一个强感为什么?!对于这个问题,但你可以做这样的:
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);
}
这不是我正在寻找的东西。我需要使用原型来提高效率。 – 2014-10-20 21:36:15
@RyanSmith:你不能(在ES5中),当参数'function(){}'被评估时,它的原型已经被分配了。但是上面没有什么效率不高的。我们不重复'Func $ toString'函数或类似的东西,只是给对象自己的属性。对象获得***许多属性。 – 2014-10-20 21:39:11
这就是我的想法,没关系。我认为这里值得一试。 – 2014-10-20 21:41:00
这是正常的原型继承,你的'Func'从'Function'继承'Func.prototype.toString' shadowing Function.toString - 有很多在线教程来教你如何编写它,简单的搜索为“JavaScript继承” – 2014-10-20 21:32:53
@ Mike'Pomax'Kamermans我想看到一个JSFiddle。当我说我尝试了一些东西时,我并不是在开玩笑。 – 2014-10-20 21:33:53
@ Mike'Pomax'Kamermans:哦,关于'新功能'没有太多“正常”...... – 2014-10-20 21:34:03