Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Структура в Javascript (https://javascript.ru/forum/misc/63026-struktura-v-javascript.html)

AndreyMG 13.05.2016 02:40

Структура в Javascript
 
Добрый день!

По воле случая столкнула меня жизнь с javascript'ом :)
Сам я с программированием знаком, а именно по большей части с C/C++, C#.

В связи с этим голова у меня думает в рамках ООП. Поэтому хотелось бы задать соответствующий вопрос:

Мне необходимо объявить структуры, далее использовать массивы хранящие эти структуры. Подскажите пожалуйста на сколько грамотен такой подход:

function COMMAND() {
    this.name = null;
    this.address = null;
    this.code = null;
    this.op1 = null;
    this.op2 = null;
}


Далее я делаю что-то типа этого:
var commands = [];

// некоторый кусок кода

commands.push(new COMMAND());


Про инициализацию значений и т.п. я молчу, это всё понятно. Просто интересует на сколько грамотен такой подход к организации СТРУКТУР в javascript.

Такой подход мне нравится тем, что я могу получить доступ к полю на подобии языка C++, т.е. просто обратиться к элементу по индексу в массиве, а далее просто использовать конструкцию с точкой - просто получить/задать нужное значение поля.

Пример:
commands[0].name = "123";


Так же интересует на сколько возможно засунуть функции в данную структуру (аналог класса для C++).

Чтобы можно было сделать что-то вроде такого:
commands[0].LogToConsole();
commands[0].ConvertCodeToHex();


Т.е. просто вызывать некоторые функции для определенного объекта структуры.

Про то что можно просто передавать таким образом в функцию я понимаю
LogToConsole(commands[0]);
ConvertCodeToHex(commands[0]);


Но лично мне будет куда удобнее 1 вариант. Так что если первый вариант не будет дичайшим бредом в рамках языка джаваскрипт - прошу помочь мне!

Заранее спасибо за ваши ответы!

Rise 13.05.2016 02:58

AndreyMG, методы класса пишем в прототип конструктора:
function COMMAND() {
    this.name = null;
    this.address = null;
    this.code = null;
    this.op1 = null;
    this.op2 = null;
}
COMMAND.prototype.LogToConsole = function() {
    // this - ссылка на объект
    // код
};
COMMAND.prototype.ConvertCodeToHex = function() {
    // код
};

// Или так
COMMAND.prototype = {
    constructor: COMMAND,
    LogToConsole: function() {
        // код
    },
    ConvertCodeToHex: function() {
        // код
    }
};

AndreyMG 13.05.2016 13:13

Спасибо большое! Именно то что я искал!


Часовой пояс GMT +3, время: 09:46.