这是什么样的javascript语法:“var XX =(function(){...})();”以及如何将它与TypeScript一起使用

时间:2016-08-04 14:18:55

标签: javascript typescript

我在PDFJS查看器示例中找到了这个:

var XX = (function XXClosure() {
  function XX(options) {
    ...
  },
  XX.prototype = {
    myMethod1: function(){...},
    myMethod2: function(){...},
    ...
  }
  return XX;
})();

我创建了这样的构造,不知道它是什么,并以这种方式在javascript项目中使用它:

var myXX = new XX(myOptions);
myXX.Method1();

这非常有效。

现在我尝试在TypeScript项目中使用此构造:

declare XX:any
import myJavascript.js;
var myXX = new XX(myOptions);

我在运行时得到错误:“XX不是构造函数”

不要问我为什么以这种方式制作,可能还有其他人,我从PDFJS viewer.js复制了它,它起作用了,我从来没有问过为什么。

但是现在,在打字稿项目中,它也应该有用。有人为此解决了吗?

4 个答案:

答案 0 :(得分:1)

这称为IIFE

var XX = (function XXClosure() {
      function XX(options) {
        ...
      },
      XX.prototype = {
        myMethod1: function(){...},
        myMethod2: function(){...},
        ...
      }
      return XX;
    })();

如果您希望将某些内容从JavaScript注入TypeScript,则必须使用 declare扩展名为.d.ts的文件中的declare var XX:any声明。

为此,请参阅此处.d.ts

您还需要使用int getHeight(Element e) { int max_height = 0; for (Element child : e.children) { max_height = max(max_height, getHeight(child)); } return max_height + 1; } - >感谢toskv

答案 1 :(得分:1)

首先是IIFE

对于TypeScript,您可以使用classdocumentation

答案 2 :(得分:1)

他们基本上通过使用自调用函数创建ES6类:,即(function(){})()。这将被分配给变量XX。

Typescript中的类似构造将是

class XX {
  constructor(options){
    //do stuff with options
  }
  myMethod1(){}
  myMethod2(){}
  ...//additional methods
}

您可以像使用

的JS对象一样实例化它
var xx = new XX(options);

如果你导出这个类,它应该没有任何问题导入。

export class XX{...}

答案 3 :(得分:0)

感谢大家的帮助。我的问题的第一部分是完整的答案。第二部分,我被侥幸解决了。我删除了'use strict'行,我得到了一条有意义的错误信息:'使用未定义的变量'。

我在'constructor'中使用了一个全局对象变量,该变量来自另一个此时未加载的js模块。将“script src ='...'”放在主html页面的head块中,而不是放在html模板中,解决了我的问题。