Не требуется () функция, а не объект?
Функции - это объекты в 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;