如何让、要求和原型协同工作以在 javascript 中制作对象

How do let, require, and prototype work together to make objects in javascript?

本文关键字:javascript 对象 作对 协同工作 原型 求和      更新时间:2023-09-26

具体来说,我正在查看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.

但它会在let {}块上抛出UnexpectedToken错误。我不确定我是否正确创建了对象或到底发生了什么。关于如何开始解开这个难题的任何想法?

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

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

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

  1. let仅在严格模式下工作

  2. --harmony_destructuring是一项正在进行的功能,因此您不应依赖它,因为它可能存在一些错误。如果你想利用ES2015的功能,我建议使用一些ES2015编译器,如Babel,Traceur或Typescript。

第一个是解构赋值。在第二个实例中,exports.Matcher简单地定义模块导出给使用者的对象。