Я написал проверку типов данных аргумента внутри тела функции. Но я хочу создать общую функцию для проверки типов данных, которая будет использоваться в нескольких других функциях.
Это мой конструктор объекта "Cat":
function Cat(name, age, owner) {
if (!checkArgsDataTypes(arguments.callee, ["string", "number", "Man"])) {
throw new Error("Incorrect data type of arguments");
}
/* Continue function body if data types is correct */
}
Здесь создается объект «Cat»:
var my_cat = new Cat("Tom", 2, new Man());
А это мой вариант общей функции проверки:
function checkArgsDataTypes(func_link, types_array) {
var i;
var current_data_type;
if (typeof func_link != "function") {
throw new Error("the first argument must be a function");
}
if (types_array instanceof Array) {
if (func_link.arguments.length != types_array.length) {
throw new Error("not matching count of arguments and count of array-type items");
}
if (types_array.length > 0) {
for (i = 0; i < types_array.length; i ++) {
if (typeof types_array[i] != "string") {
throw new Error("types_array items must have string data type");
}
}
}
else {
throw new Error("Types array is empty");
}
for (i = 0; i < types_array.length; i ++) {
current_data_type = types_array[i].toLowerCase();
/* check simple data types */
if (current_data_type == "string" || current_data_type == "object" || current_data_type == "number") {
if (typeof func_link.arguments[i] != current_data_type) {
return false;
}
}
/* check complex data types */
else {
if (func_link.arguments[i].constructor.name != types_array[i]) {
return false;
}
}
}
return true;
}
else {
throw new Error("the second argument must be an array");
}
}
Я хочу знать, что более простой и простой вариант общей функции для проверки типов данных?
Каковы ваши предложения? Благодаря.