0

Что такое – новое – ключевое слово в JavaScript?

Что такое “новое” ключевое слово в JavaScript?

Ключевое слово new в JavaScript может быть довольно запутанным, когда оно впервые встречается, поскольку люди склонны думать, что JavaScript не является объектно-ориентированным языком программирования.

  • Что это такое?
  • Какие проблемы он разрешает?
  • Когда это подходит, а когда нет?

Он делает 5 вещей:

  1. Он создает новый объект. Тип этого объекта – просто объект.
  2. Он устанавливает этот новый объект как внутреннее, недоступное, [[prototype]] (т. Е. Свойство __proto__) как конструкторную функцию внешнего, доступного, прототипа объекта (каждый объект функции автоматически имеет свойство прототипа).
  3. Это делает this переменную точкой для вновь созданного объекта.
  4. Он выполняет функцию конструктора, используя вновь созданный объект, когда this упоминается.
  5. Он возвращает вновь созданный объект, если только функция-конструктор не возвращает ссылку на null объект non-. В этом случае вместо этого возвращается эта ссылка на объект.

Примечание: функция конструктора ссылается на функцию после new ключевого слова, как в

Когда это будет сделано, если запрашивается неопределенное свойство нового объекта, скрипт проверит объект object [[prototype]] для свойства. Вот как вы можете получить что-то похожее на традиционное наследование классов в JavaScript.

Самая сложная часть этого вопроса – это номер 2. Каждый объект (включая функции) имеет это внутреннее свойство, называемое [[prototype]]. Он может быть установлен только при создании объекта, либо с новым, с Object.create, либо на основе литерала (функции по умолчанию – Function.prototype, числа – Number.prototype и т.д.). Его можно прочитать только с Object.getPrototypeOf(someObject). Нет другого способа установить или прочитать это значение.

Функции, помимо скрытого свойства [[prototype]], также имеют свойство, называемое прототипом, и именно это вы можете получить и изменить для предоставления унаследованных свойств и методов для объектов, которые вы создаете.

Это похоже на наследование классов, потому что теперь любые объекты, new ObjMaker() вами с использованием new ObjMaker() , также, похоже, унаследовали свойство “b”.

Если вы хотите что-то вроде подкласса, то вы делаете это:

Я прочитал тонну мусора на эту тему, прежде чем, наконец, найдя эту страницу, где это очень хорошо объясняется хорошими диаграммами.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *