jQuery可以使用某种模块模式吗?

时间:2016-10-13 18:09:32

标签: javascript jquery

我在someFile.js中看到了这段代码:

var someObject = {};

someObject.doWork = function(){
  var innerFunction = function() {
    console.log('innerFunction has been called');
  }

  innerFunction();
}

$(someObject.doWork);

此代码是属于durandal项目的捆绑包。这是某种模块模式吗?似乎jQuery被用来调用一个函数。

对于更常见的IIFE,有没有理由这样做?

someObject.doWork = (function(){
  var innerFunction = function() {
    console.log('innerFunction has been called');
  }

  innerFunction();
})();

要清楚,实际代码someObject位于全局命名空间中。

2 个答案:

答案 0 :(得分:1)

无法收集使用该特定模式的理由。 .doWork()不返回任何值,也不返回原始对象。 $(someObject)未定义为变量;至少在问题的javascript

将对象传递给jQuery()的原因是在对象上使用jQuery方法,其中this[0]将是回调中的原始对象;如,

$(someObject).animate({someObject.property:someObject.property})

请参阅Make a rotate animation: start and end slowly, but fast in the middle

答案 1 :(得分:0)

在第一种情况下,someObject.doWork是一个函数。在第二种情况下(IIFE)someObject.doWork未定义。我相信原作者打算创建一个模块,尽管是以非正统的方式。我计划重构代码以使用更易识别的模式。