その理由は、JavaScriptnew anonymous function
と同じではないからです。new Gmaps4Rails.Google()
// Translated JavaScript code (simplified):
var your_module = {
getModule: function() {
return Gmaps4Rails.Google;
},
createMap: function() {
// This is where things go wrong
return new this.getModule().Map();
}
};
問題は、にreturn new this.getModule().Map();
変換されることですreturn new function() { return Gmaps4Rails.Google; }
。これは、戻り値を無視しthis
て使用します(これは、無名関数から継承する新しいオブジェクトです)。したがって、この行は基本的に次のように変換されます。return {}.Map();
オブジェクトにはMap
メソッドがないため、エラーが発生します。
@module
を参照するように設定すると、Gmaps4Rails.Google
呼び出すnew @module.Map()
ときに実際に呼び出しますnew Gmaps4Rails.Google
-そしてそれはメソッドを持つオブジェクトを返しますMap
-したがって、すべてが機能します。