Почему после вызова функции в Javascript появляется точка? - PullRequest
0 голосов
/ 28 сентября 2018

В express.js, почему

.Server(app);

допустимо в качестве оператора?

var http = require('http').Server(app);

Разве require() не функция, а не объект?

Ответы [ 7 ]

0 голосов
/ 28 сентября 2018

Существует несколько способов выполнить шаблон модуля в сценарии java, например «Анонимное закрытие», «Глобальный импорт, как в модуле JQuery», требуется CommonJS, AMD UMD и т. Д. Поэтому, когда мы используем модуль через импорт или требуем, мы получаем внутреннессылка на объект.Как только мы получим объект, мы вызываем метод объекта через '.'оператор.Так что в случае "var http = require ('http'). Server (app);"Сначала мы создаем ссылку на объект в var http, а затем вызываем метод «Сервер (приложение)», представленный в этом объекте, передавая app в качестве параметра. Написание модульного JavaScript С AMD, CommonJS & ES Harmony - хорошая статья, чтобы понять, что требуется и как это работает.

0 голосов
/ 28 сентября 2018

Сегодня я пытаюсь исправить ошибку javascript в нашем проекте, многие ошибки вызваны нулевым или неопределенным значением.Например,

Cannot read property 'render' of null
Cannot read property 'message' of undefined
o.size is not a function

require ('xxx'), если вы не знаете, как его вернуть, сделайте суждения перед использованием.например:

атрибут

if(res){
  console.log(res.message);      
  //....your statement.....
}

функция

if(o && o.size){
  console.log(o.size());
  //....your statement.....
}
0 голосов
/ 28 сентября 2018

Этот метод называется цепочечные / каскадные методы .

Функция require возвращает Object, что object будет иметь ключ с именем Server, который являетсяфункция.Вы можете передавать параметры по требованию и функции сервера.

Минимальным примером будет что-то вроде этого

function require(msg) {
  console.log(msg);
  return {
    "Server": function(msg) {
      console.log(msg)
    }
  }
}

require("require message").Server("some message");
require("Calling only require");
require("Calling require with Server").Server("This is a chained call...");
0 голосов
/ 28 сентября 2018

Не требуется () функция, а не объект?

Функции - это объекты в JavaScript:

console.log(function() {} instanceof Object);

Функции на самом деле сами имеют свойства, наиболее известными из которых являются .call, .apply и .bind.Так что, если это то, что происходит, все равно будет хорошо.

Однако , код не пытается получить доступ к свойству Server функции require.

Доступ к свойству Server значения , возвращаемого путем вызова require('http').Это значение может быть любого типа (но, скорее всего, это объект).Итак, давайте кратко рассмотрим типы данных и доступ к свойствам в JavaScript.


Типы данных

В JavaScript существует 7 типов данных:

  • Boolean
  • Число
  • Строка
  • Нуль
  • Не определено
  • Символ
  • Объект

Первые 6 - это так называемые "примитивные" типы.Как видите, я не перечислял массивы, функции, регулярные выражения, даты и т. Д. Это потому, что все они имеют тип Object.У них может быть какое-то особое внутреннее поведение (например, функции могут вызываться ), но они, тем не менее, являются объектами.

Доступ к свойству

У объектов есть свойства, к которым можно обращаться через точечную запись:

x.y

Однако вы также можете сделать "foo".match(...), даже если "foo" на самом деле является примитивным значением, а не объектом.Это возможно, потому что JavaScript предоставляет «обертки объектов» для примитивных типов Boolean, Number и String (поэтому у нас есть функции конструктора Boolean, Number и String).Когда вы делаете primitiveValue.something, primitiveValue внутренне (и временно) преобразуется в эквивалент объекта.

Только если вы пытаетесь получить доступ к свойству со значением, которое не может быть преобразовано в объект, будет доступошибка.

var foo = null;
foo.bar;
0 голосов
/ 28 сентября 2018

Не требуется () функция, а не объект?

require - это переменная, которая преобразуется в функцию.

require() isвыражение, которое возвращает возвращаемое значение вызова этой функции без аргументов.

Это возвращаемое значение, предположительно, является объектом.

0 голосов
/ 28 сентября 2018

require - это функция.Но require(...) может быть любым, что конкретный модуль CommonJS экспортирует с module.exports = ....

Кроме того, функции являются объектами.Даже если require(...) является функцией, она может иметь свойство.Это общий рецепт для модулей CJS в Node.js, чтобы обеспечить экспорт по умолчанию как require(...), в то время как именованные экспорты могут быть доступны как свойства.Если экспорт по умолчанию является функцией, это:

function defaultFooExport() {...}

defaultFooExport.namedFooExport = ...;

module.exports = defaultExport;

Таким образом, он может быть импортирован как:

const foo = require('foo');
const { namedFooExport } = require('foo');
0 голосов
/ 28 сентября 2018

Вызов функции require возвращает объект, из которых Server является членом / полем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...