我希望能够在javascript中扩展函数原型(也就是说,向所有函数添加一个函数)。目的是将其转换为另一种语言之间交换的格式(即ruby,它只能通过字符串进行通信[在此特定设置中])。我已经有了一个系统,所以我可以通过to_js
在 ruby 对象上定义一个方法和to_ruby
在 javascript 对象上定义一个方法来传递其他类型,就像这样
Number.prototype.to_ruby = function () { return this.toString(); }
这适用于我想要的所有其他东西,但不适用于功能。我可以通过执行以下操作使其在 chrome 中工作:
_empty = function() {};
_empty.__proto__.to_ruby = function () {
return 'JSFunction.new(' + this.toString().to_ruby() + ')';
};
但这在 IE 中不起作用(这是系统的要求)。
我知道我有一个对象在某处通过 ID 或类似名称跟踪函数,但我不能保证它们将与创建它们的同一实例一起使用。
所有其他失败我都可以编写一个函数来处理它的特殊情况(即,isFunction(instance) ? fn_to_ruby(instance) : instance.to_ruby()
但如果可能的话,我宁愿保留这个模型。