如何让let,require和prototype一起工作以在javascript中创建对象?

时间:2016-04-21 05:39:23

标签: javascript node.js

具体来说,我正在查看Adblock javascript代码库。有几个部分:

1)那里有一条线

let {Filter, RegExpFilter, WhitelistFilter} = require("filterClasses");

我知道let用于创建块范围的变量,但括号在做什么?

2)代码中的更远一点是:

function Matcher()
{
  this.clear();
}
exports.Matcher = Matcher;

Matcher.prototype = {
    filterByKeyword = null, //...variables
    clear: function() {
        //sample function, lots more
    },
    myfunc : function() {
        return "blah blah";
    }
}

module.exports使其中的函数和属性可用,但exports.Matcher = Matcher是一样的吗?我想创建一个Matcher对象并使用变量&内部的功能。我尝试通过

模拟样式(在单独的js文件中)
let {Matcher} = require("matcher");
function testfunc() {
    let matcher = new Matcher();
    console.log(matcher.myfunc());
}

然后使用node --harmony test.js在终端中使用节点。

但它会在UnexpectedToken块引发let {}错误。我不确定我是在正确创建对象还是正在创建的对象。关于如何开始解开这个难题的任何想法?

2 个答案:

答案 0 :(得分:1)

第一行是所谓的destructuring assignment,可用于方便地将数据从对象提取到变量。

第二个块描述了一个公开类Matcher的模块。关于module.exports / exports.xxx的一篇非常好的文章是this one

根据ES2015规范,您的代码本身看起来非常精细。但是,在node.js中使用ES2015功能时应该小心,并仔细阅读docs

  1. let仅适用于strict mode

  2. --harmony_destructuring正在进行中的功能,因此您不应该依赖它,因为它可能有一些错误。如果您想使用ES2015功能,我建议使用一些ES2015编译器,如BabelTraceurTypescript

答案 1 :(得分:0)

第一个是destructuring assignment。在第二个实例中,exports.Matcher只是定义模块导出给消费者的对象。