1

此代码存在于 swipe.js 库中。我正在尝试自定义它。返回之前的注释说“暴露了 Swipe API”,但我不确定这意味着什么。

function Swipe(container, options) {

...

//everything that makes the library work, including a setup() function

...


  //expose the Swipe API
  return {
    setup: function() {

      setup();

    },
    slide: function(to, speed) {

      // cancel slideshow
      stop();

      slide(to, speed);

    },
    prev: function() {

      // cancel slideshow
      stop();

      prev();

    },
    next: function() {

      // cancel slideshow
      stop();

      next();

    },...some more stuff
}

返回的值是数组吗?数组列表?例如,我实例化一个新的滑动对象window['aNewSwipeObject'] = Swipe($theDOMElement);,然后像这样调用 setup 函数,调用window['aNewSwipeObject'].setup()setup() 什么?return 上面的 setup(),还是 Swipe() 函数的 return 中的匿名函数内部的 setup()?

4

3 回答 3

3

它返回一个对象字面量。对象中的每个键都是一个函数。

这通常用于创建函数的命名空间,通过将它们放置在函数作用域中,函数将共享从命名空间继承的局部作用域。

例如,

var Namespace = (function() {
    var helperFunction = function() { ... }
    var localData = // ...

    return {
       publicFunction1 : function() { ... },
       publicFunction2 : function() { ... },
       publicFunction3 : function() { ... }
    }

})();
于 2013-07-24T17:52:07.000 回答
1

它返回方法以便对象可以使用它们

于 2013-07-24T17:51:53.570 回答
1

它返回一个对象,其中每个属性都是对匿名函数的引用。

这是封装/隐藏数据的便捷方式。私有函数存在于Swipe函数中(您可以在 JavaScript 中嵌套函数),返回的对象文字的各个属性只是对调用这些私有函数的匿名函数的引用。

这样,只有Swipe函数才能访问那些私有的内部函数。

当您调用setup对象时,它会调用公共函数(由setup对象的属性引用),而公共函数又会调用仅在函数内部可用的内部函数setup()Swipe

这是使它清除的东西:

function myAPI(options) {

    function privateFunction1() {
       ...
    }

    function privateFunction2() {
       ...
    }

    function privateFunction3() { 
       ...
    }

    return {
        publicFunction1: privateFunction1,
        publicFunction2: function() {
            //some extra code
            privateFunction2();
        },
        publicFunction3: function() {
            ...
        }
    };
}

现在您可以通过执行以下操作获取单个实例:

var myAPIObject = myAPI(options);

但您将看到的另一种模式是:

var myAPI = (function() {

    function privateFunction1() {
       ...
    }

    function privateFunction2() {
       ...
    }

    function privateFunction3() { 
       ...
    }

    return {
        init: function(options) {
            //do something with options
        },
        publicFunction1: privateFunction1,
        publicFunction2: function() {
            //some extra code
            privateFunction2();
        },
        publicFunction3: function() {
            ...
        }
    };
})();

在这种情况下,您将myAPI.init(options)初始化 API,但在此模式myAPI中实际上是一个单例(这通常是您想要的,除非您想在每个实例的基础上维护状态)。

于 2013-07-24T17:51:54.967 回答