2012-04-07 76 views
5
// I am trying to make a clone of String's replace function 
// and then re-define the replace function (with a mind to 
// call the original from the new one with some mods) 
String.prototype.replaceOriginal = String.prototype.replace 
String.prototype.replace = {} 

这下一行现在已经坏了 - 我该如何解决?如何用自定义函数替换javascript原型

"lorem ipsum".replaceOriginal(/(orem |um)/g,'') 
+4

它适用于我(在Firefox中)。如果你能解释“破碎”是什么意思,它可能会有所帮助。 – Pointy 2012-04-07 20:08:20

+1

一致认为,它在Chrome中也可以正常工作:http://jsfiddle.net/4hPhG/ – 2012-04-07 20:09:38

+0

我的代码中唯一可以看到的是错误的是第一条语句中缺少';'。 – 2012-04-07 20:10:33

回答

16

唯一可能的问题是,你的代码被执行了两次,这会导致问题:真正的原.replace就会消失。

为了避免这样的问题,我强烈建议您使用以下的一般方法,以取代内置的方法:

​​
  • 这允许多个方法修改破坏现有的功能
  • 的背景是通过.apply()保存:通常,对象(原型)方法至关重要。
+0

可能还有其他问题。例如(假设)'replace'是递归的,在某些情况下,使用带有不同参数的this.replace(...)'调用“自身”(除了不会调用它自己,而是另一个不兼容的方法)。一般情况下,用不兼容的方法替换预定义的方法是行不通的,除非你也确切地知道哪个预定义的方法调用哪个方法。这与在不知道依赖关系图的情况下用普通库中的不兼容函数替换函数没有区别。 – 6502 2012-04-07 20:24:34

+0

这是完全正确的 - 我执行了两次,原来被覆盖。小学生错误。感谢与其他一些有用的指针彻底的答案。 – 2012-04-07 20:59:38