Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Какая разница между объявлением класса через function и через class?

#javascript #классы #объекты


Зачем нужно это:

function createClass() 
{
    this.name = "oneOfMyClasses";
}

var obj = new createClass();


Если есть это:

class myClass 
{
    constructor() 
    {
        this.name = "oneOfMyClasses";
    }
}

var obj = new myClass();


Какая разница между объявлением класса через function и через class?
    


Ответы

Ответ 1



На самом деле классы — это "специальные функции", поэтому точно также, как вы определяете функции, вы можете определять и классы. В JavaScript есть отдельные термины для таких объявлений: class declaration function declaration Разница между объявлением функции (function declaration) и объявлением класса (class declaration) в том, что объявление функции совершает подъём (hoisted), в то время как объявление класса — нет. Поэтому вначале необходимо объявить ваш класс и только затем работать с ним. (Источник: Classes) Поднятие задумывалось как общий способ мышления о том, как контекст исполнения (в частности, фазы создания и исполнения) работает в JavaScript. Однако, hoisting может привести и к недоразумениям. Например, hoisting учит, что объявление переменной или функции физически перемещается в начало вашего кода, хотя в действительности этого не происходит. На самом же деле, объявления переменных и функций попадают в память в процессе фазы компиляции, но остаются в коде на том месте, где вы их объявили. Поднятие (hoisted) constructor - специальный метод, служащий для создания и инициализации объектов, созданных с использованием class. Любая функция, вызванная через new становится конструктором и позволяет создать один объект. Также будет полезно почитать: constructor new

Ответ 2



// это было function createClass() { ... // когда этого еще не было class myClass { ...

Ответ 3



Классы - это по сути синтаксический сахар в ES6. Под капотом все равно все происходит, как будто: function createClass() {

Комментариев нет:

Отправить комментарий