JSFiddle - React, Tailwind, and code Playground
by Rolf
JavaScript
const parameter = (function() {
// Vorbereitete Readonly-Propertydeskriptoren für status: true und status:false
const trueStatus = { configurable:false, writable:false, value: true };
const falseStatus = { configurable:false, writable:false, value: false };
// Helper - erzeuge einen unveränderlichen Success- oder Fail-Prototypen für ein Prüfergebnis
function createResultPrototype(checkType, statusProperty, message) {
const prototype = Object.create(null, {
status: statusProperty,
type: { writable: false, configurable: false, value: checkType },
message: { configurable: false,
get: function() { return this.name + ' ' + message; } }
});
return Object.freeze(prototype);
}
// Funktions-Factory für einen bestimmten Test. Erzeugt die Prototypen für
// die Ergebnisobjekte und die Methode zur Testdurchführung.
function makeCheck(type, test, successMessage, failMessage) {
const success = createResultPrototype(type, trueStatus, successMessage),
fail = createResultPrototype(type, falseStatus, failMessage);
return function(name, value) {
result = Object.create(test(value) ? success : fail);
result.name = name;
return result;
}
}
// Erzeuge ein Objekt mit den gewünschten Check-Methoden
const parameter = {
isTypeString : makeCheck('typeString', val => typeof val === 'string',
'is a string', 'must be a string'),
isTypeArray : makeCheck('typeArray', val => Array.isArray(val),
'is an Array', 'must be an Array'),
isTypeInteger: makeCheck('typeInteger', val => Number.isInteger(val),
'is an integer', 'must be an integer'),
isTypeNumber : makeCheck('typeNumber', val => Number.isFinite(val),
'is a number', 'must be a number')
};
// Mit freeze dafür sorgen dass keiner am Helper herumspielt.
return Object.freeze(parameter);
})();
let checks =...