Я хотел бы вызвать функцию JS с параметром "params" в форме объекта со значениями / функциями по умолчанию, реализованными как объект-прототип. Таким образом, вызывающая сторона может переопределить значения / функции по умолчанию, но все равно сделать «супер» вызов (без всех prototype.name.call (this .. uglyness).
Рассмотрим следующий код, который работает как и ожидалось:
const _defaultParams = {
val: 42,
_hello: function (msg) {
console.log('The message is: ' + msg);
}
};
_defaultParams.hello = _defaultParams._hello;
const proto = {
doit: function (params, callback) {
params = Object.assign(Object.create(_defaultParams), params);
params.hello('Hello, World!');
return callback();
}
}
const obj = Object.create(proto);
obj.doit({
hello: function (msg) { // kustom hello fn
msg = msg.toUpperCase();
return this._hello(msg);
}
}, (err) => {
console.log('done');
});
Вывод:
$ node aliasfn.js
The message is: HELLO, WORLD!
done
Вопрос в том, есть ли более чистый / ясный способ сделать это. В частности, есть ли способ объявить значение по умолчанию "привет "Функция в _defaultParams вместо внешнего. Мне не интересно использовать классы и новые и расширяет и т. д. Это избыточно для этого (и большинство всего остального IMO). Но у меня будет много" params ", так что было бы замечательно, если бы был более умный способ упростить это.
Кроме того, приветствуются и приветствуются общие рекомендации / пламя по технике. Я все еще пытаюсь улучшить свой стиль кодирования JavaScript.