具体来说,我正在查看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对象并使用变量&内部的功能。我尝试通过
let {Matcher} = require("matcher");
function testfunc() {
let matcher = new Matcher();
console.log(matcher.myfunc());
}
然后使用node --harmony test.js
在终端中使用节点。
但它会在UnexpectedToken
块引发let {}
错误。我不确定我是在正确创建对象还是正在创建的对象。关于如何开始解开这个难题的任何想法?
答案 0 :(得分:1)
第一行是所谓的destructuring assignment,可用于方便地将数据从对象提取到变量。
第二个块描述了一个公开类Matcher
的模块。关于module.exports
/ exports.xxx
的一篇非常好的文章是this one。
根据ES2015规范,您的代码本身看起来非常精细。但是,在node.js中使用ES2015功能时应该小心,并仔细阅读docs:
let
仅适用于strict mode
--harmony_destructuring
是正在进行中的功能,因此您不应该依赖它,因为它可能有一些错误。如果您想使用ES2015功能,我建议使用一些ES2015编译器,如Babel,Traceur或Typescript
答案 1 :(得分:0)
第一个是destructuring assignment。在第二个实例中,exports.Matcher
只是定义模块导出给消费者的对象。