Экспресс () или новый экспресс ()

Я действительно запутался в заявлении var app = express(). Я просматривал старую публикацию об этом (в stackoverflow), и один парень сказал, что var app = express () похож на var app = new express (). У меня есть 2 файла js для имитации этого, но я не могу понять, как 'new express ()' дает желаемый результат.

//play.js
  var express = require('./express');
   var app = new express();
 // this will call createApplication function as app is referencing to it.
   console.info(app); // "app"

а также

//express.js
function createApplication(){
   var app = 'app';
    return app;
  }
module.exports = createApplication;

Когда я использую var app = new express (), результат будет createApplication {}. а не app

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
0
440
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

express - это заводская функция, а не функция-конструктор. Ее следует вызывать как обычную функцию, а не использовать с new.

Вы можете увидеть его код прямо здесь: https://github.com/expressjs/express/blob/master/lib/express.js#L37

function createApplication() {
  var app = function(req, res, next) {
    app.handle(req, res, next);
  };

  mixin(app, EventEmitter.prototype, false);
  mixin(app, proto, false);

  // expose the prototype that will get set on requests
  app.request = Object.create(req, {
    app: { configurable: true, enumerable: true, writable: true, value: app }
  })

  // expose the prototype that will get set on responses
  app.response = Object.create(res, {
    app: { configurable: true, enumerable: true, writable: true, value: app }
  })

  app.init();
  return app;
}

Именно эта функция createApplication() экспортируется из require('./express');, поэтому, когда вы вызываете express(), вы просто вызываете эту функцию createApplication().


Это может сработать, выполнив new express(), потому что функция createApplication() также будет вызываться (как конструктор) в этом случае и поскольку она возвращает объект app, который будет результатом new express(), но это расточительный способ сделать это, потому что Оператор new создаст объект, который затем будет выброшен.

выразить в стороне, если я просто использую эти фиктивные файлы js, когда я использую var app = new express (), что я сделал, чтобы получить результат createApplication {}, и если я хочу получить результат как просто app, как мне это сделать (с использованием нового ключевого слова).

Rohan Sharma 31.10.2018 19:22

@RohanSharma - Почему настаивают на использовании new express()? Это НЕ то, как он был разработан для использования. Вероятно, это сработает, если вы сделаете const app = new express(), но он НЕ предназначен для использования.

jfriend00 31.10.2018 19:26

хорошо, я просто пытаюсь понять логику, я не очень разбираюсь в программировании, я понимаю, что мы экспортируем функцию и используем функцию, когда мы используем var = express (), я думаю, я буду пытаться ударить и попытаться научиться в чем дело

Rohan Sharma 31.10.2018 19:30

@RohanSharma - Когда вы вызываете express(), он вызывает экспортированную функцию createApplication(), показанную в моем ответе. Выполнение этой функции создает другую функцию (которая является объектом в Javascript), назначает кучу свойств этому объекту функции, дает ему прототип, а затем возвращает этот новый объект. Я не знаю, почему Express делает это именно так, а не использует обычный конструктор с new. Это просто другой, более ручной способ создания нового объекта с прототипом и некоторыми методами.

jfriend00 31.10.2018 19:37

Другие вопросы по теме