#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, если кто-то не выполнил работу подобной сложности.