Я ищу возможность расширить прототип функции в javascript (то есть добавить функцию ко всем функциям).
Цель состоит в том, чтобы преобразовать его в формат для обмена между другими языками (а именно руби, который может общаться только через строки [в этом конкретном случае]). У меня уже есть система, поэтому я могу обойти другие типы, определив метод 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 (что является требованием системы).
Я знаю, что где-то у меня есть объект, который отслеживает функции по идентификатору или подобному, но я не могу гарантировать, что они будут использоваться с тем же экземпляром, который их создал.
В противном случае я мог бы просто написать функцию для особого случая (например, isFunction(instance) ? fn_to_ruby(instance) : instance.to_ruby()
, но я бы предпочел оставить это модель, если возможно.