Правильный способ проверки аргументов типов данных - PullRequest
0 голосов
/ 04 сентября 2018

Я написал проверку типов данных аргумента внутри тела функции. Но я хочу создать общую функцию для проверки типов данных, которая будет использоваться в нескольких других функциях. Это мой конструктор объекта "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");
    }

}

Я хочу знать, что более простой и простой вариант общей функции для проверки типов данных? Каковы ваши предложения? Благодаря.

...