Расширение прототипа функции

Я ищу возможность расширить прототип функции в 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(), но я бы предпочел оставить это модель, если возможно.

5
задан DanielB 10 May 2012 в 06:22
поделиться