繁体   English   中英

分配给这个javascript工厂的参数是什么?

[英]What are the arguments to this javascript factory assigned to?

我试图理解这个JavaScript模式是如何工作的,它是括在括号中的整个库。 我的理解是括号是一种范围变量的方法,但内部是一个接受参数(global,factory)的函数。

我试过搜索这种模式是如何工作但却找不到任何东西。

代码体返回一个可以在别处使用的对象,但是我不明白globalfactory完成的参数的目的是什么。

我一直在阅读有关机箱和匿名功能的内容,但无法找到有关这样定义的机箱的任何信息。

(function (global, factory) {
    global.className = factory();
    }  (this, function () {
         ObjectName.prototype = function() {
             /* some code */
         }
         var data = {
              getUsefulData: function(obj) {
                   return new ObjectName(obj, 'usefuldata');
              }
         }
        return data;
    })
);

问题:

  • 如果外部函数没有参数会发生什么?
  • 这里将什么值分配给全局和变量?

你所看到的是一个带有两个参数的IIFE(一个立即调用的函数表达式) 考虑这个例子:

const x = (function(a, b) { return a + b; })(5, 6); // x === 11

参数global被分配的争论this (其中,在顶层使用时,为达到一个普遍的方式全局对象, window的浏览器和global对Node.js的 ),第二个参数factory被分配的大(二)功能。

然后,IIFE将factory函数的结果(实际上是库代码)放在className键下的全局对象(在此模式中也称为命名空间)。


这是Revealing Module Pattern的变体,只有从factory函数返回的内容将被放置在global.className ,允许您拥有“私有”变量和函数,这些变量和函数不会被公开,但仍然可以被“public”访问对象。

(function(global, factory) {
  global.myModule = factory();
}(this, function() {
  const privateMessage = 'secret';
  function secret() {
    return privateMessage;
  }

  function open() {
    return 'Message: ' + secret();
  }

  return { open };
}));

window.myModule.open(); // Message: secret
// no way to directly access privateMessage or secret().

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM