JavaScript对象不是从原型链继承的
JavaScript objects not inheriting from prototype chain
我在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"
但是在运行脚本时,我得到了一个CCD_。此外,如果我更改CurrentDate
构造函数以包含此警报:
function CurrentDate()
{
alert(this._subclass);
this._subclass = "CurrentDate";
}
CurrentDate.prototype = new CustomDateTime;
得到的消息是CCD_ 4。
如果我改为分配var now = new CustomDateTime()
,那么调用subclass()方法将按预期返回"CustomDateTime"。我还定义了另一个构造函数ModelObject
,它的原型设置为Root
,subclass()在这些对象上也按预期执行。
我从中得到的是,CurrentDate构造函数被排除在CurrentDate:CustomDateTime:Root链之外,只是作为一个独立的构造函数来调用——使用该函数创建的对象似乎不是从分配给CurrentDate函数对象的原型继承的。
这不是使用JavaScript原型的正确方式吗?再说一遍,在我看来,这应该进展得很顺利。。
感谢"灰色状态即将到来"的响应。看到代码在jsfiddle中正确运行告诉我,当你在一个.html页面上包含多个标签时,你必须按照它们的原型继承顺序放置标签。如果CurrentDate在CustomDateTime之前,则在分配CurrentDate.prototype
时尚未定义CustomDateTime函数。
- JavaScript对象不是从原型链继承的
- 如何使用原型继承编写一个整洁灵活的复杂javascript应用程序
- $emit,$broadcast,原型继承
- Javascript:继承原型而不重新定义构造函数
- 原型继承未按预期工作
- JavaScript中的原型继承.我可以称之为“超级”等价物吗?
- 为什么函数对象的实例没有继承函数原型属性
- 不创建父对象的原型继承
- Javascript基本继承与Crockford原型继承
- JavaScript-构造函数参数和原型继承
- 使用Object.create作为原型的原型继承将[Object]作为实例的原型
- javascript继承中正确的原型做作是什么
- 如何进行JavaScript原型继承(原型链)
- Javascript原型继承原型函数调用
- 对象不继承原型函数
- 从其他类继承原型方法,而不重写自己的原型方法
- JavaScript继承原型
- 继承原型
- Javascript继承/原型混淆
- 使用.call(this)继承原型