我想让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”。
为什么我这样办不到?要怎么做才能办到?
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”。
为什么我这样办不到?要怎么做才能办到?
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 />");
我知道这样可以让子类的构造函数得到基类的构造函数的属性和方法,但这样就产生了复制,而不能模拟C++中基类的静态成员不会被子类复制的情形。JavaScript里要让子类访问这种“基类的静态成员”,只能直接指定基类名,比如CType.GetType()。
而C++里要访问它,则既可以指定基类名,也可以指定任何实例名,比如Type.GetType(), NewType.GetType()。
<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>
base();
}my.prototype=new base();最简单的继承构造了 就是多了个 new base();