/ / `this` objeto en require (). function () - javascript, node.js, this, require

`this` object in require (). function () - javascript, node.js, this, require

Tratando con el robots biblioteca de nodos, noté que

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

difiere de

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

El primero require falla lamentando que un this.someFunction() no existe, mientras que el segundo tiene éxito. Por alguna razón, el this el objeto en la primera línea de arriba aparentemente se refiere al objeto global, mientras que en la segunda línea está vinculado al robots módulo. ¿Por qué?

El error que recibo es:

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

setUrl es el actual someFunction mencionado en el ejemplo.

Respuestas

1 para la respuesta № 1
var robots = new require("robots").RobotsParser();

se analiza como

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

es decir, trata de llamar al RobotsParser método de un require() ejemplo. No ¡que querías!


1 para la respuesta № 2

La primera línea hace una invocación de constructor de require, que modifica efectivamente el this referencia en el alcance de la biblioteca para apuntar a una nueva instancia supuesta de require. Esto es incorrecto y require siempre debe llamarse como una función regular. Agregar el paréntesis (como en la segunda línea) borra el problema, ya que en su lugar creará una nueva instancia de RobotsParser.