Javascript模块模式/原型模式:无法弄清楚这段代码

时间:2014-10-13 09:41:34

标签: javascript design-patterns module prototype

我试图创建一个简单的谷歌地图插件。我正在按照教程,但我无法弄清楚这段代码。有人可以解释一下这段代码吗?

(function(window, google) {

   var Mapster = (function() {
       function Mapster(element, opts) {
           this.gMap = new google.maps.Map(element,opts);
       }

       Mapster.prototype = {
           zoom: function(level) {
               //some code here
           }
       };

       return Mapster;
   }());

  Mapster.create = function(element, opts) {
      return new Mapster(element, opts);
 };

 window.Mapster = Mapster;

}(window, google));

2 个答案:

答案 0 :(得分:2)

// http://benalman.com/news/2010/11/immediately-invoked-function-expression/
(function (window, google) {
    // local `Mapster` IIFE
    var Mapster = (function () {
        // local `Mapster` constructor function
        function Mapster(element, opts) {
            this.gMap = new google.maps.Map(element, opts);
        }

        Mapster.prototype = {
            zoom: function (level) {
                //some code here
            }
        };

        return Mapster;
    }());

    // convenience function to create new instances of `Mapster`
    Mapster.create = function (element, opts) {
        return new Mapster(element, opts);
    };

    // exposing `Mapster` globally
    window.Mapster = Mapster;

    // passing in `window` & `google` as params to the IIFE
}(window, google));

// usage:

var mapster = Mapster.create(someEl, {});

console.log(mapster.gMap);

希望评论清楚这一点!

答案 1 :(得分:1)

这是closure

外部功能功能(窗口,谷歌){}(windows,google)用于在该命名空间中创建命名空间(初始化后google和窗口传递到那里):

  • 使用传递的命名空间(谷歌对象)的Mapster原型描述
  • 创建该对象并将其指定为窗口属性后
  • 所以我们有 window.Mapster 对象,它将了解 google 对象。 在定义之后立即运行该未命名函数需要外圆括号。

    相关问题