Создание общедоступного метода в JavaScript. Почему этот синтаксис?

#javascript #public-members

#javascript #public-члены

Вопрос:

Я изучал код TinyMCE и наткнулся на этот способ предоставления общедоступных методов:

 tinymce.extend(this, {
    execCommand : execCommand,
    queryCommandState : queryCommandState,
    queryCommandValue : queryCommandValue,
    addCommands : addCommands
});
  

Какая польза от написания вышеупомянутого, если вместо этого можно использовать приведенный ниже код (с меньшим количеством строк кода и меньшим временем выполнения, требуемым для той же задачи!)

 this.execCommand = execCommand;
this.queryCommandState = queryCommandState;
this.queryCommandValue = queryCommandValue;
this.addCommands = addCommands;
  

Или даже короче, где-нибудь в объявлении объекта:

 execCommand: execCommand,
queryCommandState: queryCommandState,
queryCommandValue: queryCommandValue,
addCommands: addCommands
  

В чем подвох?

Ответ №1:

Ну, одна вещь, которая бросается в глаза, это то, что первый образец, который у вас есть, — это метод, в котором TinyMCE ожидает свои аргументы для своей extend функции.

Просматривая источник extend , он проверяет каждую пару ключ-значение на undefined , добавляя их к объекту только в том случае, если они определены. Итак, добавлена небольшая функциональность, которая может быть полезна при расширении класса.

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

1. правильно, он ожидает список объектов, которыми данный объект должен быть расширен. Именно так они публикуют свои частные методы, но мой вопрос в том, почему публикуют именно так, а не более простым способом?

2. Спасибо, Демиан, для меня это просто означает, что в случае опечатки в названии метода потребуется больше времени для выявления ошибки. Но я думаю, что трудно спорить с создателями tinymce, если кто-то не выполнил работу подобной сложности.