问题标签 [monkeypatching]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
806 浏览

ruby - Ruby 的“开放类”会破坏封装吗?

在 Ruby 中,允许程序员更改预定义的类。所以一个非常糟糕的程序员可以做这样的事情:

显然,几乎没有人会这么愚蠢,但是对预定义类进行更细微的更改可能会导致已经工作的代码出现问题的想法在我看来违反了封装原则。

四个问题:

  1. 首先,这实际上是否违反了封装的 OO 原则?
  2. 其次,作为一名程序员,有没有办法可以在我的代码中保证我正在使用一个未修改版本的类?
  3. 第三,出于任何原因,我是否应该在我的代码中“打开”类?
  4. 最后,在大规模的生产编码环境中如何处理这类事情?换句话说,编程行业的人真的会在其他人会使用的代码中这样做吗?或者即使他们不这样做,您如何确保某处的某个插件作者没有做这样的事情会破坏您程序的重要部分?

我知道这是一个有点主观的问题,但我真的很想知道更广泛的编程社区对所谓的“猴子补丁”的看法。

0 投票
6 回答
10130 浏览

ruby-on-rails - 如何对在 Rails 中自动加载的代码进行猴子补丁?

我正在用类似的东西给 Rails 引擎打补丁:

我第一次访问网站时,至少在开发模式下,它可以工作,但第二次就像我的补丁不存在一样。我认为它是 Rails 自动重新加载引擎(安装在 vendor/ 中)而不是重新加载我的代码。这是 Rails 2.3。

任何想法如何做到这一点,以便我的代码也被重新加载?

0 投票
3 回答
93543 浏览

ruby - 当猴子修补实例方法时,您可以从新实现中调用覆盖的方法吗?

假设我正在修补类中的方法,我怎么能从覆盖方法中调用被覆盖的方法?即有点像super

例如

0 投票
3 回答
6427 浏览

javascript - 将 Google Analytics cookie 转换为本地/会话存储

更新 http://jsfiddle.net/musicisair/rsKtp/embedded/result/


Google Analytics 设置了 4 个 cookie,这些 cookie 将随所有对该域的请求一起发送(并偏移其子域)。据我所知,没有服务器直接使用它们;它们仅__utm.gif作为查询参数发送。

现在,显然 Google Analytics 会读取、写入并根据它们的值进行操作,并且它们需要可用于 GA 跟踪脚本。

所以,我想知道是否有可能:

  • 写入后将 cookie重写__utm*到本地存储ga.js
  • ga.js运行后删除它们
  • ga.js在读取它们之前将 cookie 从本地存储重写回 cookie 形式
  • 重来

或者,猴子补丁ga.js在开始 cookie 读/写部分之前使用本地存储。

显然,如果我们要移除__utm*cookie,我们还需要使用 Analytics 的异步变体。

我猜投反对票是因为我没有问问题。哦!

我的问题是:
可以如上所述完成吗?
如果是这样,为什么没有完成?


我有一个默认的HTML/CSS/JS样板模板,它以接近完美的分数通过了 YSlow、PageSpeed 和 Chrome 的审核。我真的在寻找一种方法来在支持本地存储的浏览器中从 Google Analytics 中压缩剩余的 cookie 字节。

0 投票
8 回答
37718 浏览

python - 我可以将自定义方法/属性添加到内置 Python 类型吗?

例如——假设我想向helloWorld()Python 的 dict 类型添加一个方法。我可以这样做吗?

JavaScript 有一个以这种方式运行的原型对象。也许这是糟糕的设计,我应该将 dict 对象子类化,但它只适用于子类,我希望它适用于任何和所有未来的字典。

以下是它在 JavaScript 中的运行方式:

这是一个包含更多示例的有用链接——http ://www.javascriptkit.com/javatutors/proto3.shtml

0 投票
2 回答
448 浏览

ruby - 有没有更好的方法来“猴子补丁”Ruby 的基类?

vector * scalar对于我正在编写的几何库,我想支持向量乘以标量,只需定义Vector#*方法就很容易做到。然而,为了支持scalar * vector所有的Fixnum#*,Bignum#*Float#*方法必须是猴子补丁。我为这些类中的每一个使用以下代码来实现这一点:

我想知道是否有更好的方法来实现这一点,或者这样做是否有任何潜在的问题?

0 投票
1 回答
25820 浏览

groovy - 在groovy中为对象动态添加属性或方法

是否可以在 Groovy 中为对象动态添加属性或方法?这是我到目前为止所尝试的:

但我得到以下异常:

0 投票
1 回答
110 浏览

ruby - 为什么我的 instance_variable 为零?(2行代码)

我正在尝试创建一个散列,该散列存储一个不存在的键的自动递增数字。我知道还有其他不那么脆弱的方法可以做到这一点;我的问题是:为什么我的实例变量失败得如此惨?

0 投票
2 回答
2612 浏览

python - 如何在 Python 中修补 __init__ 模块?

我知道,我知道,它很脏。我想知道是否可以劫持__init__Python 模块的模块以自己替换它。

我之所以这样问是因为我需要阻止 django lib 启动它的 init 进程的某些部分,使其与我们的配置一起崩溃。

是的,最好修复 django 库并发回补丁。是的,我正在与作者联系。但现在,我需要快速修复。

0 投票
3 回答
12997 浏览

python - 将日期时间戳添加到 Python 打印

我正在尝试调试我所依赖的大型库的行为,该库通过其许多源文件使用分散的调试打印语句(不会过多)。问题是,如果不是所有这些调试打印语句,大多数(如果不是全部)都不包含日期/时间戳,因此很难将应用程序级别的故障与库代码本身的故障联系起来。

与其修改所有怀疑与我所看到的故障有关的调试打印的源代码,我认为可以临时修补内置的 Python 打印“函数”,以便所有输出都带有前缀时间戳。

由于内置的​​ print 不是我正在使用的 Python 2.6 环境中的函数,我不知道这是否可能。如果有人这样做或使用 Python 中的另一个钩子实现了类似的结果,那么我将不胜感激您的建议,或者甚至更好的代码来解决这个问题。