関数プロトタイプを JavaScript で拡張できるようにしたいと考えています (つまり、すべての関数に関数を追加します)。目的は、それを別の言語 (つまり、[この特定の設定では] 文字列を介してのみ通信できる ruby) 間で交換するための形式に変換することです。私はすでにシステムを持っているのでto_js
、Ruby オブジェクトのto_ruby
メソッドと JavaScript オブジェクトのメソッドを定義することで、他の型を渡すことができます。
Number.prototype.to_ruby = function () { return this.toString(); }
これは、私が望む他のすべてのもので機能しますが、関数では機能しません。次のようにして、クロムで動作させることができます。
_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()
.