对象不支持此属性或方法(自定义对象的自定义原型方法)

时间:2015-04-27 12:25:40

标签: javascript internet-explorer-11

我有这段代码:

function Event(fromDate, toDate, color) {
    if (toDate < fromDate) {
        throw "Invalid date interval";
    }
    this.fromDate = fromDate;
    this.toDate = toDate;
    this.color = color;
}

Event.prototype._compareDates = function (date1, date2) {
    if (date1 && date2) {
        return date1.getTime() - date2.getTime();
    } else {
        return null;
    }
};

Event.prototype.inInterval = function (date) {
    return (this._compareDates(date, this.fromDate) >= 0) && (this._compareDates(date, this.toDate) <= 0);
};

Event.prototype.isCoveredBy = function (event) {
    return (this._compareDates(event.fromDate, this.fromDate) < 0) && (this._compareDates(event.toDate, this.toDate) > 0);
};

Event.prototype.overlapsWith = function (event) {
    return this.inInterval(event.fromDate) || this.inInterval(event.toDate) || this.isCoveredBy(event);
};

var event1 = new Event(new Date(), new Date(), "#ffffff");
var event2 = new Event(new Date(), new Date(), "#ffffff");

alert(event1.overlapsWith(event2));

适用于Chrome和Firefox,但在Internet Explorer 11上看起来它无法找到任何Event.prototype.foo函数并抛出错误&#34;对象不支持此属性或方法&#34 39; FOO&#39;

更新:

问题在于此代码:

function saveOrUpdate(color) {
    var fromDate = PF('fromDate').getDate();
    var toDate = PF('toDate').getDate();
    event = new Event(fromDate, toDate, color);
    $('#inlineDatepicker').datepick('addOrUpdateEvent', event);
    $('#inlineDatepicker').datepick('clear');
}

使用PrimeFaces RequestContext从bean调用它,以便将新事件添加到Javascript日历中。请注意,第三行未声明新变量&#39; event&#39;按照我的意图。

出于某种原因,IE11解释该事件在全局命名空间中是Event类型(请参阅Andrei Nemes的答案),而不是我自己的同名自定义类型。 Chorme和Firefox正确解释了类型。因此,解决方案是更改第三行,添加&#39; var&#39;:

var event = new Event(fromDate, toDate, color);

对不起,之前没有发布过这部分代码。我将更改Event类的名称以避免将来出现问题。

1 个答案:

答案 0 :(得分:1)

Event已存在于全局命名空间中。当您声明Event.prototype.overlapsWith Internet Explorer将其附加到本机Event对象而不是您的类声明时。如果您查看Event对象,可以在那里看到它。 轻松修复是不使用名称Event

编辑:没关系,似乎工作。尽管如此,使用名称Event仍然不是一个好主意。您能否添加有关错误的更多详细信息?