我想让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”。
为什么我这样办不到?要怎么做才能办到?

解决方案 »

  1.   

    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 />");
      

  2.   

    我确实不太确定那段代码做的事,所以来提问的。
    我知道这样可以让子类的构造函数得到基类的构造函数的属性和方法,但这样就产生了复制,而不能模拟C++中基类的静态成员不会被子类复制的情形。JavaScript里要让子类访问这种“基类的静态成员”,只能直接指定基类名,比如CType.GetType()。
    而C++里要访问它,则既可以指定基类名,也可以指定任何实例名,比如Type.GetType(), NewType.GetType()。
      

  3.   


    <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>
      

  4.   

    function base(){}function my(){
       base();
    }my.prototype=new base();最简单的继承构造了 就是多了个 new base();