`this` object in require().function()

`this` object in require().function()

本文关键字:function in this object require      更新时间:2023-09-26

在处理robots节点库时,我注意到

var robots = new require('robots').RobotsParser();

与不同

var robots = new (require('robots')).RobotsParser();

第一个require失败了,哀叹this.someFunction()不存在,而第二个成功了。出于某种原因,上面第一行中的this对象显然是指全局对象,而在第二行中,它绑定到robots模块。为什么?

我收到的错误是:

/home/user/crawler/lib/robots/lib/parser.js:44
    this.setUrl(url, after_parse);
         ^
TypeError: Object #<Object> has no method 'setUrl'

CCD_ 5是示例中提到的实际CCD_。

var robots = new require('robots').RobotsParser();

被解析为

var robots = (new require('robots')).RobotsParser();

即尝试调用CCD_ 8实例的CCD_不是你想要的!

第一行调用require的构造函数,它有效地修改了库范围内的this引用,以指向require的一个新的假定实例。这是不正确的,require应该始终作为常规函数调用。添加括号(如第二行所示(可以解决问题,因为它将创建RobotsParser的新实例。