Работа с переменными c в JavaScript - PullRequest
0 голосов
/ 08 января 2020

Немного путаницы в том, как static работает в javascript.

function StaticExample() {}

StaticExample.staticProp = "Hello"

console.log(StaticExample.staticProp) // "Hello"

Здесь я создал function, а затем создал переменную stati c staticProp (не если мы можем назвать это stati c хотя). Это добавляет поле staticProp в поле constructor в StaticExample 's prototype

Вопрос 1. Есть ли конкретная c причина для такого поведения (поле добавляется в свойство конструктора )?

Теперь constructor переписывается, как показано ниже.

StaticExample.prototype.constructor = {}

console.log(StaticExample.staticProp) // "Hello"

Даже после этого, когда я пытался получить доступ к StaticExample.staticProp, он выдает правильное значение Hello

Вопрос 2: Откуда взято staticProp, даже когда constructor, где оно было первоначально добавлено, перезаписано.

1 Ответ

3 голосов
/ 08 января 2020

StaticExample - это объект. Функциональный объект, но тем не менее объект.
Вы присваиваете ему новое свойство: StaticExample.staticProp = "Hello".

StaticExample также имеет свойство prototype.
Свойство StaticExample.prototype.constructor указывает на StaticExample.

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

Вы также можете заменить значение StaticExample.prototype.constructor с чем-то еще; StaticExample.prototype.constructor больше не указывает на StaticExample. Но StaticExample по-прежнему StaticExample, и у него все еще есть свойство staticProp, которое вы создали для него. Вы никоим образом не заменили объект StaticExample. То, что вы заменили, было StaticExample.prototype.constructor, что является другим свойством другого объекта.

...