jjzjj

monkeypatching

全部标签

javascript - "monkey patching"真的那么糟糕吗?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭3年前。Improvethisquestion某些语言(如Ruby和JavaScript)具有开放类,允许您修改核心类(如数字、字符串、数组等)的接口(interface)。显然这样做会使熟悉API的其他人感到困惑,但有充分的理由这样做吗?假设您要添加到界面而不更改现有行为,否则请避免使用它?例如,添加一个Array.map可能会很好不实现ECMAScript第5版的Web浏览器的实现(如果你不需要所有的jQuery)。或者您的Rub

ruby-on-rails - 猴子修补设计(或任何 Rails gem)

我正在使用Devise我的Rails项目中的身份验证gem,我想更改它在flash警报中使用的key。(设计使用:notice和:alertflash键,但我想将它们更改为:success和:error以便我可以使用Bootstrap显示漂亮的绿色/红色框。)所以我希望能够以某种方式覆盖DeviseController中的set_flash_message方法.这是新方法:defset_flash_message(key,kind,options={})ifkey=='alert'key='error'elsifkey=='notice'key='success'endmessage=

ruby - 猴子修补与。坚硬的。原则?

在一些个人项目中,我正在慢慢地从PHP5转向Python,目前我很喜欢这种体验。在选择走Python路线之前,我查看了Ruby。我从ruby​​社区注意到的是猴子修补既常见又受到高度重视。我还遇到了很多关于调试ruby​​软件试验的恐怖故事,因为有人包含了一个相对无害的库来做一些小工作,但却在没有告诉任何人的情况下修补了一些频繁使用的核心对象。我选择Python是因为(除其他原因外)它的语法更清晰,而且它可以完成Ruby可以做的一切。Python使OO的点击比PHP以往任何时候都好得多,而且我正在阅读越来越多的OO原则,以加深这种更好的理解。今晚我一直在阅读关于RobertMartin

ruby - 猴子修补 ruby​​ 类的推荐方法

我注意到在ruby​​中有两种常见的猴子修补类的方法:像这样在类中定义新成员:classArraydefnew_method#dostuffendend然后在类对象上调用class_eval:Array.class_evaldodefnew_method#dostuffendend我想知道这两者之间是否有任何区别,使用一种方法是否比另一种方法有优势? 最佳答案 老实说,我曾经使用第一种形式(重新开课),因为它感觉更自然,但你的问题迫使我对该主题进行了一些研究,结果如下。重新打开该类的问题在于,如果您打算重新打开的原始类由于某种原因此

ruby - 在 Rails 中,如何向 String 类添加一个新方法?

我想为我的Rails项目中的不同对象构建一个索引,并想添加一个我可以在String对象上调用的“count_occurences”方法。我看到我可以做类似的事情classStringdefself.count_occurencesdo_something_hereendend定义此方法的确切方法是什么,以及将代码放在我的Rails项目中的什么位置?谢谢 最佳答案 您可以在lib/ext/string.rb的应用程序中定义一个新类,并将以下内容放入其中:classStringdefto_magic"magic"endend要加载此类,

ruby - 'Monkey Patching' 在 Ruby 中到底是什么意思?

根据维基百科,一个monkeypatch是:awaytoextendormodifytheruntimecodeofdynamiclanguages[...]withoutalteringtheoriginalsourcecode.来自同一条目的以下陈述让我感到困惑:InRuby,thetermmonkeypatchwasmisunderstoodtomeananydynamicmodificationtoaclassandisoftenusedasasynonymfordynamicallymodifyinganyclassatruntime.我想知道Ruby中猴子修补的确切含义。它

javascript - 猴子补丁 XMLHTTPRequest.onreadystatechange

猴子如何修补XMLHTTPRequest的onreadystatechange函数。我正在尝试添加一个函数,当从页面发出的每个ajax请求返回时都会调用该函数。我知道这听起来很糟糕,但用例非常特殊。我想将某个SDK与控制台(jqconsole)一起使用,但在不修改外部SDK的情况下显示控制台内ajax调用的状态和结果。我看过thispost它有很好的信息,但没有关于猴子修补回调的信息,这似乎超出了我的JavaScript技能。P.S不能使用jQuery,因为它只支持从jQuery发出的ajax调用,而不是直接从XMLHTTPRequests发出的ajax调用,这里就是这种情况。

javascript - 是否可以重写 Javascript 数组或对象以使其可调用?

我想弄清楚Array[]和Object[]是否可以用Array()和Object()代替。函数原型(prototype)是否可以插入数组或对象原型(prototype)链中以使其可调用。基本上我正在寻找这样的东西://somemagicwithprototypes????????????????a=[1,3,4]b=[1,3,4]console.log(a[1])//prints3console.log(b(1))//prints3a[0]=-1//sameasb(0,-1)console.log(a[1],b(1))//prints-1-1非常感谢! 最佳

javascript - 我如何猴子修补对象的构造函数?

我想猴子修补这个“Controller”对象的构造函数。但是我如何猴子修补构造函数以便我仍然可以调用原始函数?这是我试过的。//originalfunctionController(){this._tag='div';}Controller.prototype.tag=function(){console.log(this._tag);}varc=newController();c.tag();//->'div',asexpected//patchattemptvaroriginal=Controller;Controller=function(){original.apply(thi

javascript - 猴子修补 XMLHttpRequest.prototype.open 和 "touching"参数

我正在尝试为在IE8兼容模式下运行的Intranet站点打补丁XMLHttpRequest.prototype.open但它一直抛出SCRIPT438:Objectdoesn'tsupportthispropertyormethod。奇怪的是...如果我先“触摸”arguments,即取消注释bar,它工作得很好!有谁知道为什么,如果触摸它确实可以在100%的情况下解决问题?varfoo=window.XMLHttpRequest.prototype.open;window.XMLHttpRequest.prototype.open=function(){//varbar=argume