日期:2014-05-16  浏览次数:20423 次

请问这个构造函数链为什么不成功啊
<script>  
function Retangle(w,h){
  this.width=w;
  this.height=h;
}

Retangle.prototype.area=function(){return this.width*this.height}

function PositionRetangle(x,y,w,h){
  this.superclass(w,h);
  this.x=x
  this.y=y
}
PositionRetangle.prototype.superclass=Retangle
a=new PositionRetangle(4,9,5,7)
alert(a.area())

</script>  
怎么让a 弹出面积值35啊? 少写了什么吗

------解决方案--------------------
<script type="text/javascript">
function Retangle(w,h){
this.width=w;
this.height=h;
Retangle.prototype.area=function(){return this.width*this.height};
}

function PositionRetangle(x,y){
this.x=x;
this.y=y;
}
PositionRetangle.prototype=new Retangle(5,7);
var a=new PositionRetangle(4,9);
alert(a.area());
</script>
探讨

回复x269147836 alert(a.superclass.area()) 可以,但是我想让a继承啊 alert(a.area()) 直接这样不行吗

------解决方案--------------------
PositionRetangle.prototype=new Retangle();
------解决方案--------------------
function Retangle(w,h){
this.width=w;
this.height=h;
}

Retangle.prototype.area=function(){return this.width*this.height}
//因为area方法需要的是width、height这两个属性,所以赋上值再调用area方法就直接可以了。
function PositionRetangle(x,y,w,h){
this.width=w;
this.height=h;
this.x=x
this.y=y
}
//js因为是原型继承,所以想要让PositionRetangle具有area方法,就必须要把
//prototype定义为一个具体的Retangle对象
PositionRetangle.prototype=new Retangle();
a=new PositionRetangle(4,9,5,7)
------解决方案--------------------
superclass不是js提供的继承方式,不知道你从哪儿看来的
js没有提供直接的继承方式,要实现继承需要自己写继承方法
一般可以用prototype属性达到继承的目的,在网上搜一下js的继承,代码大把,还有一些框架也都提供继承的函数
------解决方案--------------------
你这个代码可以运行么?

我怀疑Retangle这个构造函数怎么得到你给出的参数?

this.superclass(w,h);????建议看看javascript高级程序设计的面向对象部分

探讨

这是我想得到的代码:

<script type="text/javascript">
function Retangle(w,h){
this.width=w;
this.height=h;
}

Retangle.prototype.area=function(){return this.width*this.height};

function Position……