Как узнать, вызвана ли переменная или функция? - PullRequest
0 голосов
/ 11 июля 2020

Примечание. Этот вопрос основан на SDK администратора firestore, но это общий JS вопрос.

Работа с JS admin SDK firestore меня очень озадачила. Сравните эти 2 примера

Запросить значение базы данных

admin.firestore().collection('my-Col').doc('my-doc').get().then(...)

Получить временную метку сервера

admin.firestore.FieldValue.serverTimestamp()

В первом примере это admin.firestore(), во втором примере это admin.firestore

Как возможно иметь первое поведение, если вызывается как функция, другое поведение, если вызывается как ключ объекта?

Может быть, admin.firestore() вызывает конструктор ... Но затем, как получить значение stati c (независимо от того, какой конструктор был вызван ранее или нет), выполнив admin.firestore?

Ответы [ 2 ]

1 голос
/ 11 июля 2020

От @jonrsharpe:

«Функция A JavaScript также может иметь произвольные свойства»

Вы дали мне совет! Построил небольшой пример для тестирования

const bill = () => ({
  friend: "boule"
});

bill.name = "bill";

const base = {
  bill: bill
};

console.log(base.bill().friend);
// -> boule
console.log(base.bill.name);
// -> bill

Это то, что я искал. Большое спасибо.

0 голосов
/ 11 июля 2020

В Javascript функции также могут иметь собственные свойства. В javascript у вас есть либо примитивные значения (логические, числа, строки, null и undefined), либо (все остальные) объекты. И функции не исключение. Их называют первоклассными объектами. Первоклассный объект - это цитата из Википедии :

В дизайне языка программирования первоклассный гражданин (также тип, объект, сущность или значение) в данном язык программирования - это объект, который поддерживает все операции, обычно доступные другим объектам. Эти операции обычно включают передачу в качестве аргумента, возвращение из функции, изменение и присвоение переменной.

Когда вы делаете что-то вроде:

admin.firestore()

, вы получаете значение, возвращаемое firestore. И случается, что это возвращаемое значение имеет свойство с именем collection (функция).

Однако, когда вы это делаете:

admin.firestore.FieldValue

, вы получаете доступ к FieldValue недвижимость на firestore.

...