LINUX.ORG.RU

Конструкторы классов vs __proto__

 ,


0

1

лучей добра всем! Возник вопрос, холиворный наверное, насчет использования свойства __proto__ в node.js. Есть некие декларативные объекты JS, записанные в отдельных файлах, для примера:

User = {
    title: 'пользователь',
    fields: {
        Name: {
            type: 'string',
            minSize: 3,
            title: 'Имя'
        }
    }
}

но не JSON, т.к. может помимо декларативных свойств иметь небольшие функции (validate например)

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

Так вот, как делают в лучших домах кремниевой долины - создать конструкторы объектов (ака классы), и использовать их, или проставить прототипы пользуясь свойством __proto__, которое в nodejs/v8 определено и доступно (более того, вроде как уже и в ECMAScript внесли)?

Конструкторы выглядят логичнее:

User = new User({
    title: 'пользователь',
    fields: {
        Name: new Field({
            type: 'string',
            minSize: 3,
            title: 'Имя'
        }),
    }
});

а с __proto__ - менее многословно (тем более, если учесть отсутствие кучи require(") в заглавии) и более декларативно. Кроме того, запись

        Name: new Field({
            type: 'string',
            minSize: 3,
            title: 'Имя'
        }),
является более ресурсоемкой для машины, т.к. выполняет создание объекта, передачу его параметром, последующее копирование полей и удаление объекта инициализации. Вариант с параметрами конструктора - не подходит, т.к. свойств может быть много.

Пример простой, на самом деле вложение объектов может быть достаточно большое. Holy question - насколько уродски использование __proto__ в программе?

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 2)

все-таки больше склоняюсь к использованию конструкторов - логичнее, понятнее, без спорного __proto__, а потери на инициализацию можно простить, т.к. выполняются редко.

dib2 ★★★★★
() автор топика

является более ресурсоемкой для машины

Ты пишешь на JS. Если тебя волнуют байты и такты, ты должен писать на C.

Xellos ★★★★★
()
Ответ на: комментарий от Xellos

я думаю тут не о байтах и тактах, а о мегабайтах и секундах тормозов, если все это умножить большой проект. О производительности надо всегда думать, на чем бы не писал.

dib2 ★★★★★
() автор топика

Полагаю, что конструкторы все-таки уместнее.

Возможно вам стоит взглянуть в сторону dojo - там это весьма интересно реализовано через т.н. «смеси». Там наследование происходит путем подмешивания одного класса к другому.

k0valenk0_igor ★★★
()

Я считаю, что нужны не просто конструкторы, а продвинутые фабрики, способные наследовать конструирование объекта.

special-k ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.