是因为你已经用Polygon.call(this,3),调用了Polygon方法.它成了Triangle函数的一个变量,在这个函数内有效.所以去掉语句A没什么问题,再说你语句A写的有问题.
 你把Polygon()附加给Triangle的什么? 你没有指明...
 
 你应该把Polygon()附加到Triangle的一个属性.如Triangle.prototype.polygon=Polygon;
然后在生明Triangle后调用这个方法属性. 

解决方案 »

  1.   

    <script>
    function Polygon(sides) //多边形
    {
    this.sides = sides;
    if(typeof Polygon._initialized == "undefined"){
    Polygon.prototype.getArea = function(){
    return 0;
    };
    Polygon._initialized = "true";
    }

    function Triangle(base,height) ///三角形
    {
    //Polygon.call(this,3);
    this.base = base;
    this.height= height;
    Triangle.prototype.pg=Polygon
    if(typeof Triangle._initialized == "undefined"){
         Triangle.prototype.getArea = function(){
    return 0.5*this.base*this.height;}
    };
    Triangle._initialized = "true";
    alert("1");
    }
    var d  = new Triangle("5","2");
    d.pg(3)
    alert("sides="+d.sides)
    alert(d.getArea())
    alert("2");
    </script>
      

  2.   

    to hongweishu() :
    语句A:我看书上这样写的--Triangle.prototype = new Polygon();////语句A  
    书上说是为了把Polygon的prototype赋给Triangle的prototype,就是Polygon里的sides属性.给
    Triangle里面的sides,这样Triangle里面也会有sides属性.还有就是书上说我的那个例子,你建立一个Triangle对象调用会有问题,
    但是你建立1个以上,除了第一个对象不能用,其他的getArea方法就可以用.
    比如:
    .....
    var d  = new Triangle("5","2");
    var d2  = new Triangle("5","2");
    alert("sides="+d.sides)
    alert(d2.getArea())  ///这时 这个对象的方法就可以用
      

  3.   

    上面都已经call出一个实例了,后面还new什么呀,只改一个地方就可以了
    <script>
    function Polygon(sides) //多边形
    {
    this.sides = sides;
    if(typeof Polygon._initialized == "undefined")
    {
    Polygon.prototype.getArea = function(){
    return 0;
    };
    Polygon._initialized = "true";
    }
    }
    function Triangle(base,height) ///三角形
    {
    Polygon.call(this,3);
    this.base = base;
    this.height= height;
    if(typeof Triangle._initialized == "undefined")
    {
    Triangle.prototype.prototype = Polygon.prototype;
            Triangle.prototype.getArea = function(){
    return 0.5*this.base*this.height;
    };
    Triangle._initialized = "true";
    }
    alert("1");
    }
    var d  = new Triangle("5","2");
    alert("sides="+d.sides)
    alert(d.getArea())
    alert("2");
    </script>