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这个类其实没多大实际用途