我在 Chrome 21 中为我的构造函数定义原型时遇到了麻烦。我正在做一个大项目,在该项目中我试图实现一个基于伪类的结构(因此是“子类”属性),其中一些非常松散数据封装,但我对 JavaScript 中的原型设计和继承相对较新,无法弄清楚出了什么问题。StackOverflow 上还有其他模糊相似的线程,但没有什么能解决这个问题。
以下是我正在使用的构造函数:
function Root()
{
this._subclass = "Root";
this.subclass = function(){
return this._subclass;
};
this._date;
this.date = function(){
return this._date;
};
}
function CustomDateTime()
{
this._subclass = "CustomDateTime";
this._value = new Date();
}
CustomDateTime.prototype = new Root;
function CurrentDate()
{
this._subclass = "CurrentDate";
}
CurrentDate.prototype = new CustomDateTime;
直觉上,在我看来我应该能够做到这一点(因为 subclass() 是在Root
构造函数中定义的):
var now = new CurrentDate();
alert(now.subclass()); // should alert "CurrentDate"
但是在运行脚本时,我得到一个TypeError: Object #<CurrentDate> has no method 'subclass'
. 此外,如果我更改CurrentDate
构造函数以包含此警报:
function CurrentDate()
{
alert(this._subclass);
this._subclass = "CurrentDate";
}
CurrentDate.prototype = new CustomDateTime;
结果消息是undefined
.
如果改为分配var now = new CustomDateTime()
,则调用 subclass() 方法会按预期返回“CustomDateTime”。我还定义了另一个构造函数 ,ModelObject
它的原型设置为Root
并且 subclass() 也按预期在这些对象上执行。
我从中得到的是 CurrentDate 构造函数被排除在 CurrentDate 之外: CustomDateTime : Root 链并且只是被称为独立构造函数-使用此函数创建的对象似乎不是从分配的原型继承到 CurrentDate 函数对象。
这不是使用 JavaScript 原型的正确方法吗?再一次,在我看来,这应该非常顺利..