对象不支持此 属性 或方法(自定义对象的自定义原型方法)
Object doesn't support this property or method (custom prototype method of custom object)
我有这个代码:
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 函数并抛出错误“对象不支持此 属性 或方法 'foo'.
更新:
问题出在这段代码上:
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 日历。请注意,第三行没有像我打算的那样声明一个新变量 'event'。
出于某种原因,IE11 将事件解释为全局命名空间中的事件类型(请参阅 Andrei Nemes 回答),而不是我自己的同名自定义类型。 Chorme 和 Firefox 正确解释类型。因此,解决方案是更改第三行,添加 'var':
var event = new Event(fromDate, toDate, color);
很抱歉之前没有post这部分代码。我将更改我的活动名称 class 以避免将来出现问题。
Event
已存在于全局命名空间中。当您声明 Event.prototype.overlapsWith
时,Internet Explorer 会将其附加到本机事件对象,而不是您的 class 声明。如果你看一下 Event
对象,你可以在那里看到它。
简单的解决方法是不使用名称 Event
.
编辑:没关系,它似乎有效。不过,使用名称 Event 可能仍然不是一个好主意。您能否添加有关该错误的更多详细信息?
我有这个代码:
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 函数并抛出错误“对象不支持此 属性 或方法 'foo'.
更新:
问题出在这段代码上:
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 日历。请注意,第三行没有像我打算的那样声明一个新变量 'event'。
出于某种原因,IE11 将事件解释为全局命名空间中的事件类型(请参阅 Andrei Nemes 回答),而不是我自己的同名自定义类型。 Chorme 和 Firefox 正确解释类型。因此,解决方案是更改第三行,添加 'var':
var event = new Event(fromDate, toDate, color);
很抱歉之前没有post这部分代码。我将更改我的活动名称 class 以避免将来出现问题。
Event
已存在于全局命名空间中。当您声明 Event.prototype.overlapsWith
时,Internet Explorer 会将其附加到本机事件对象,而不是您的 class 声明。如果你看一下 Event
对象,你可以在那里看到它。
简单的解决方法是不使用名称 Event
.
编辑:没关系,它似乎有效。不过,使用名称 Event 可能仍然不是一个好主意。您能否添加有关该错误的更多详细信息?