0

我在 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 原型的正确方法吗?再一次,在我看来,这应该非常顺利..

4

1 回答 1

0

感谢'灰色状态即将到来'的响应。看到代码在 jsfiddle 中正常运行告诉我,当您在 .html 页面上包含多个标签时,您必须按照它们的原型继承顺序放置标签。CurrentDate.prototype如果 CurrentDate 在 CustomDateTime 之前,则在分配时尚未定义 CustomDateTime 函数。

于 2012-09-09T05:45:00.740 回答