その理由は、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-したがって、すべてが機能します。