子类能不能继承基类的构造函数的属性?

饶鹏 2010-02-28 09:36:06
我想让Javascript模拟C++的类的继承关系,但好像基类的构造函数的属性无法被子类访问?

<html><body><script type="text/javascript">
CType = function() {}
CType.GetType = function() {return "OK";}

CNewType = function() {}
CNewType.prototype = new CType();
CNewType.prototype.constructor = CNewType;

// ...

Type = new CType();
NewType = new CNewType();

document.write("CType.GetType(): " + CType.GetType() + "<br />");
document.write("CNewType.GetType(): " + CNewType.GetType() + "<br />");
</script></body></html>



结果是CNewType.GetType()出错:“TypeError: CNewType.GetType is not a function”。
为什么我这样办不到?要怎么做才能办到?
...全文
111 5 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
KK3K2005 2010-03-01
  • 打赏
  • 举报
回复
function base(){}

function my(){
base();
}

my.prototype=new base();

最简单的继承构造了 就是多了个 new base();
Objector 2010-02-28
  • 打赏
  • 举报
回复

<html><body><script type="text/javascript">
CType = function() {}
//CType.GetType = function() {return "OK";}
CType.prototype.GetType = function() {
return "OK";
};

CNewType = function() {}
CNewType.prototype = new CType();
CNewType.prototype.constructor = CNewType;

// ...

Type = new CType();
NewType = new CNewType();

document.write("CType.GetType(): " + CType.GetType() + "<br />");
document.write("CNewType.GetType(): " + CNewType.GetType() + "<br />");
</script></body></html>
饶鹏 2010-02-28
  • 打赏
  • 举报
回复
上面最后一句话漏了“也可以指定子类名”。
饶鹏 2010-02-28
  • 打赏
  • 举报
回复
我确实不太确定那段代码做的事,所以来提问的。
我知道这样可以让子类的构造函数得到基类的构造函数的属性和方法,但这样就产生了复制,而不能模拟C++中基类的静态成员不会被子类复制的情形。

JavaScript里要让子类访问这种“基类的静态成员”,只能直接指定基类名,比如CType.GetType()。
而C++里要访问它,则既可以指定基类名,也可以指定任何实例名,比如Type.GetType(), NewType.GetType()。
wtcsy 2010-02-28
  • 打赏
  • 举报
回复
CNewType.prototype = new CType(); //不知道这句代码你完全看懂没有 应该是没有 不然不会这么问

new CType();实例化的对象 是得到的CType函数里面this所有指的属性和方法 和CType原形上的属性和方法 不会获得CType的属性和方法

如果你想得到函数的属性和方法 可以自己写个函数去获得

var Extend = function(o,oo){
for(var i in o)
oo[i] = o[i]
}
CType = function() {}
CType.GetType = function() {return "OK";}

CNewType = function() {}
CNewType.prototype = new CType();
CNewType.prototype.constructor = CNewType;
Extend(CType,CNewType);
// ...

Type = new CType();
NewType = new CNewType();

document.write("CType.GetType(): " + CType.GetType() + "<br />");
document.write("CNewType.GetType(): " + CNewType.GetType() + "<br />");
相关推荐
发帖
JavaScript

8.7w+

社区成员

Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
帖子事件
创建了帖子
2010-02-28 09:36
社区公告
暂无公告