欢迎光临
我们一直在努力

JavaScript支持面向对象的开发(2)

建站超值云服务器,限时71元/月
这些类有层次之分吗?

另一个好问题的是javascript的类是否有层次之分。回答是肯定有。我们来仔细看看是怎么做到分层的。我们可以定义一个rectangle子类,并把figure作为父类:

function rectangle(startx, starty, endx, endy) {
this.width = endx – startx;
this.height = endy – starty;
this.centerx = (endx + startx)/2;
this.centery = (endy + starty)/2;
this.computearea = computearea;
function computearea() {
this.area = this.width*this.height;
} }
rectangle.prototype = new figure();

rectangle对象是用4个自变量创建的,前四行是构造器。 rectangle类包含了一个方法: computearea()。最后一行rectangle.prototype = new figure();,把rectangle类定义为从figure类继承来的子类。
然我来解释一下prototype(原型)。每个对象构造器都有prototype属性;这是用来给所有的对象增加新属性和方法的。这就是为什么原型被用来实现继承:child.prototype = new parent();。通过原型,父对象的所有属性和方法都被添加到子对象上。
要注意this.centerxthis.centeryarearectangle类中所使用的属性,但是它们是 figure父类的属性。和rectangle类相似,circle类可以被定义成figure类的原型。这种父子关系可以按你需要来定义深度;你可以创建另一个rectangle的子类。

我如何创建一个类的实例?

在javascript里创建一个类的实例很容易:
rect = new rectangle(100,100,900,800);
这就创建了rectangle类型的一个对象。rectangle的构造器在属性width, height, centerx, 和centery中填入了值。rect.area属性的值是零(0)。使用这个命令就能调用area方法:
rect.computearea();
rect.area的值现在是560,000。要调用transform方法使用:
rect.transform(100,200,0);

父和子对象的属性可以像这样访问到:
var ar = rect.area;
var wi = rect.width;

我能超越属性和方法吗?

就像你在java中的一样,你可以超越属性和方法。在子类中定义的属性或者方法可以超越同名的父类的属性和方法。
和全局变量互动
javascript也支持全局变量的使用。在以下代码段中测试一下g_area变量的范围:
<html>
<script>
var g_area = 20;
function figure() {

this.area=g_area;

}
function rectangle(){ … }
rectangle.prototype = new figure();
function test(){
g_area = 40;
rect = new rectangle();
alert(rect.area);
}
</script>
<body onload = test()/>
</body>
</html>

rect.area的值是20(不是你预计的40),这是因为rectangle对象是figure对象的原型,这种关系在test()被调用以前就被定义了。要使用g_area的新值,你需要用以下的方法:

function test() {
g_area = 40;
rectangle.prototype = new figure();
rect = new rectangle();
alert(rect.area);
}

对于所有的rectangle的新实例,这将改变area属性的值。或者,你可以使用这种方法:function test() {
g_area = 40;
rect = new rectangle();
rectangle.prototype.area = g_area;
alert(rect.area);
}

这将改变rectangle所有现存的以及新实例的area属性的值。

结论

为了效仿oo开发,javascript提供了必需的继承、封装和超越属性,尽管它不支持接口和方法的过载。如果你是刚接触到oo开发,用它试试。oo概念允许开发者将一组数据和相关操作集中入一个对象。这在管理浏览器事件和管理浏览器内svg图时很有用。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » JavaScript支持面向对象的开发(2)
分享到: 更多 (0)

相关推荐

  • 暂无文章