如何调用javascript扩展(overrided?)函数?

时间:2015-05-12 13:41:04

标签: javascript jquery

我正在尝试扩展kendo.ui.validator(类似于jQuery验证器) 我重写日期函数,但我应该使用相同的逻辑重载mvcdate函数。覆盖日期函数被调用并正确运行。

我不想复制和粘贴,所以尝试从mvcdata覆盖中调用覆盖的数据函数,但没有成功。语法是this.rules.date(input)我在javascript OOP部分是初学者,所以我不知道我在做什么,虽然我的语法似乎是合理的。我错过了什么?

(function ($, kendo) {
    $.extend(true, kendo.ui.validator, {
        rules: {
            date: function (input) {
                if (input.is("[data-val-date]")) {
                    var value = input.val();
                    var check = false;
                    //var m = moment(value.toString(), "YYYY-MM-DD HH:mm:ss", true);
                    var m = moment(value.toString(), defaultJavaScriptDateFormat, true);
                    check = m.isValid();
                    //var message = "";
                    //if (!check) {
                    //    message = "Invalid " + m.invalidAt() + ". Please enter a correct date";
                    //}
                    //input.attr("data-val-date", message);
                    return !input.is("[data-val-required]") || check;
                }
                return true;
            },
            mvcdate: function (input) {
                // Here I try to call the overrided date function to prevent copy and paste, this cause runtime error in chrome:
                return this.rules.date(input);
            }
        },
        messages: {
            date: function (input) {
                return input.attr("data-val-date");
            }
        }
    });
})(jQuery, kendo);

1 个答案:

答案 0 :(得分:1)

您可以使用直接方法调用来访问您的函数:

mvcdate: function (input) {
    return kendo.ui.validator.rules.date.call(this, input);
}

如果kendo.ui.validator是使用new关键字创建的对象的实例,而您的date函数是原型的一部分,则可以使用原型调用它:

mvcdate: function (input) {
    return kendo.ui.validator.prototype.rules.date.call(this, input);
}