首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

JavaScript定义种或对象

2012-11-09 
JavaScript定义类或对象本来想就JavaScript如何定义类或对象生成写篇文章,但是经过仔细比较,还是在w3schoo

JavaScript定义类或对象

本来想就JavaScript如何定义类或对象生成写篇文章,但是经过仔细比较,还是在w3school有篇高级教程中讲得更加合理,于是就直接将文章转帖到这里。

更加内容参见w3school:http://www.w3school.com.cn/js/pro_js_object_defining.asp。

注:ECMAScript即JavaScript核心。

?

使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象。

ECMAScript 拥有很多创建对象或类的方法。

工厂方式原始的方式

因为对象的属性可以在对象创建后动态定义,所有许多开发者都在 JavaScript 最初引入时编写类似下面的代码:

由于创建对象时有这么多问题,你一定会想,是否有种合理的创建对象的方法呢?答案是有,需要联合使用构造函数和原型方式。

混合的构造函数/原型方式

联合使用构造函数和原型方式,就可像用其他程序设计语言一样创建对象。这种概念非常简单,即用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法)。结果是,所有函数都只创建一次,而每个对象都具有自己的对象属性实例。

我们重写了前面的例子,代码如下:

这种方式是 ECMAScript 采用的主要方式,它具有其他方式的特性,却没有他们的副作用。不过,有些开发者仍觉得这种方法不够完美。

动态原型方法

对于习惯使用其他语言的开发者来说,使用混合的构造函数/原型方式感觉不那么和谐。毕竟,定义类时,大多数面向对象语言都对属性和方法进行了视觉上的封装。请考虑下面的 Java 类:

每次完成字符串连接都会执行步骤 2 到 6,使得这种操作非常消耗资源。如果重复这一过程几百次,甚至几千次,就会造成性能问题。解决方法是用Array 对象存储字符串,然后用 join() 方法(参数是空字符串)创建最后的字符串。想象用下面的代码代替前面的代码:

TIY

这段代码对字符串连接进行两个测试,第一个使用加号,第二个使用 StringBuffer 类。每个操作都连接 10000 个字符串。日期值d1 和 d2 用于判断完成操作需要的时间。请注意,创建 Date对象时,如果没有参数,赋予对象的是当前的日期和时间。要计算连接操作历经多少时间,把日期的毫秒表示(用 getTime()方法的返回值)相减即可。这是衡量 JavaScript 性能的常见方法。该测试的结果应该说明使用 StringBuffer 类比使用加号节省了50% - 66% 的时间。

?

1 楼 joehe 2010-01-05   对于你的那个字符串连接,我想知道你测出临界值出来没有,你现在用的是10000来测试的,可是很多地方哪会有10000来连接,就几个字符串连在一起的很多的 2 楼 蔡华江 2010-01-07   一开始就讲过,这篇文章是从w3scroll转载过来的,主要讲述JS对象的创建方式。在后面附带了一个字符串连接的例子。
谢谢你提出的问题,经过我测试,在FF中,字符串连接不会消耗过多的资源,反之,使用数组来会增加字符串连接的时间。以下是一个简单的表格:
500010000100000直接连接0ms2ms11ms数组连接1ms2ms19ms
而在IE中正好相反,直接连接会带来严重的性能消耗,随着连接的次数增加,花费的时间也会增加,而且不是倍数增加(指数倍增加?):
500010000100000直接连接31ms125ms33625ms数组连接31ms47ms547ms
w3scroll中应该就是以IE为测试依据的。竟其原因,不甚明白。 3 楼 joehe 2010-01-08   ie是处理js最慢的 4 楼 蔡华江 2010-01-11   joehe 写道ie是处理js最慢的
嗯,是很慢。幸好像上面那样的字符串连接操作都不会太长。
要是都上万了就麻烦了。
StringBuffer这个类其实没多大实际用途

热点排行
Bad Request.