JavaScript世界中对于对象的定义:(来自ECMAScript规范)

“unordered collection of properties each of which contains a primitive value, object, or function.” (也就是无次序的一组值)


 

对象的种类:

Native 对象:



Array:注意join()的用法和String和Array之间的转换(split())以及concat(),slice()方法,以及pop()和push()(最后一个元素);shift()和unshift()(第一个元素)的使用(Array可以当作Stack来用),以及reverse()和Sort()的用法。

Date源于java.util.Date的早期版本,与Java一样,date实质上是从1970,1月1日零时算起的毫秒数(使用Date.UTC(1970,0,1,0,0,0),注意月份是0-11,实际上是可以取其他值的,只不过,-1就会把年减为1969,12就会把年加为1971, 另外年应该输入全位数,如果0-99则为1900+year,)


    默认构造器生成当前时间(var d = new Date()),注意Prase()方法的使用(new Date(Date.prase(“2006/01/05”)));toString()与valueOf()对于Date来说是不同的;以及toDateString(),toTimeString();以及toUTCString()的用法(转换为UTC标准时间,也就是GMT时间,即中国(北京)时间减八小时)。注意:getDate()与getDay()的区别,前者为得到今天的日期,后者为得到星期几(0-6,周日为0),如今天为1月6日,周五,则得到6和5。


—————————————————————————————————————————

Build-in 对象:

定义(ECMAScript规范):

“any object supplied by an ECMAScript implementation, independent of the host environment, which is present at the start of the execution of an ECMAScript program.”

包括:

Globle和Math

Globle

这个对象并不能直接引用,它是所有Stand-alone function的实际对象,例如parseInt(),isNaN(),等,但是不可以直接引用它,它对于developer是不可见的。重要的Stand-alone function还有encodeURL()/decodeURL() (注意:支持非ASCII字符,所以不要再使用旧的BOM中的escape()/unescape()了);另外还有eval()(就如同独立的语法解释器一样,执行输入字符串代表的JavaScript语句),此外,所有的native对象的构造器实际上都是Globle对象的属性,当然,因为Globle是不可见的,所以是不能通过它来引用的。(注意,Globle只是个概念含义,对于程序是没有意义的)

Math

有很多有用的方法和属性,例如属性有:Math.PI ; Math.E 方法有max(); abs()(绝对值);ceil()(进位取整) floor()(截尾取整) round()(四舍五入);random()(0,1直接随机数,但不包括0,1)


有用的方法,得到一个一定范围的随机数:



—————————————————————————————————————————

Host对象

定义:

所有不属于native(build-in)对象的对象,也就是由Host环境(指一个ECMAscript实现)提供的对象,例如BOM或DOM对象。

—————————————————————————————————————————

对象的Scope

JavaScript的所有方法和属性都是Public的,没有Protected和Private;所以只能靠编程习惯来尽量避免,如变量的命名方法,私有变量可以声明为obj._color 来提醒,但这并不能阻止访问,只是提醒而已

Java中的Static方法和Static域有吗?严格的说,没有。但可以通过在构造器中声明function来得到某种程度上的Static

This关键字,this keyword always points to the object that is calling a particular method 。记住是calling的object

—————————————————————————————————————————

JavaScript中创建对象

创建对象,最好的办法:混合构造器和prototype

例子:




属性是每个对象不同的,所以使用构造器,方法是每个对象共有的,所以用原形(prototype)。

但是这种方法对于原形定义放在构造器以外,这让有些泛Java程序员使用起来不习惯,所以有人提出动态原形的方法,即把原形声明放在构造器中,但通过条件控制还判断是否还需要调用。这种方法类似Java中实现Sington模式的方法。

这种方法被称为:动态原形方法(Dynamic prototype method

 

 



这种方法好处是比较接近Java类的样式,但是因为私有变量实际是不存在的,所以只能靠人为的认定。

对于JavaScript来说,类似Java,String也是Immutable的,

有用的方法 仿照Java的StringBuffer




—————————————————————————————————————————

JavaScript的对象修改

这是脚本语言特有的功能,所有的对象都可以修改,包括native对象。How?通过prototype

例如Number的toString方法,toString(16)表示转换为16进制,但不方便记忆,可以自定义一个toHexString()方法(如Number.prototype.toHexString = function () { return this.toString(16)};)

当然也可以覆盖掉已经存在的方法。更有甚者,还可动态修改一个已经创建的对象的原形,这被称为甚迟绑定very late binding(不是必须,别乱用)