The reason is that new anonymous function
is not the same as new Gmaps4Rails.Google()
in JavaScript.
// 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();
}
};
The problem is that return new this.getModule().Map();
translates to return new function() { return Gmaps4Rails.Google; }
- which ignores the return value and uses this
(which is a new object inheriting from the anonymous function). Thus the line essentially translates to return {}.Map();
Since objects do not have a Map
method, you get an error.
When you set @module
to be a reference to Gmaps4Rails.Google
then when you call new @module.Map()
you are actually calling new Gmaps4Rails.Google
- and it returns an object which has a Map
method - thus everything works.