昨天晚上回了趟乡下,所以没时间写博客了,那今天继续吧,今天主要是学习了ECMAScript 5增强的对象模型, 以及一些javascript的内建对象,现在总结一下。先说明一下哦,我也是一只菜鸟啦,刚学没多久,大家一起探讨探讨,如果博客写的有问题的话,欢迎及时帮我指出。
7.1 ECMAScript 5 增强的对象模型
看完了,我不知道有些什么用,感觉讲的东西都是好理论的东西,实际应用的应该比较少吧。就拎一下重点:
ECMAScript 5 增强了对对象模型的控制力度,通过新的对象模型,用户可以控制单独的属性是否允许读取,写入,删除和枚举等,甚至可以控制对象是否允许添加或删除属性,这样就可以实现密封对象的功能。--------太文艺了,我这样的菜鸟目前肯定是用不到这么先进的东西的。
使用Object.defineProperty()定义属性,在定义属性时可以改变描述符的键值。语法如下:
Object.defineProperty(obj,prop,desc);
obj:对象,该参数指定为该类的原型对象
prop:字符串,用于指定属性名
desc:包含属性的描述
function Person(){} Object.defineProperty(Person.prototype, "name", { value:"tony", //这些属性定义描述默认都是true writeable:true, enumerable:true, configurable:true }); //下面代码就可以得到属性值tony var person = new Person(); document.write(person.name);
接下来可以一次定义多个属性,用Object.defineProperties()方法。Object.defineProperties(obj,props)
接下来介绍几个枚举属性,也就是略微提一下,有个印象,到时候要用的话现场查一下就行了。
Object.keys(obj),获取属性名,也就是上面代码的name。
Object.getOwnPropertyNames(obj),列出所有能枚举和不能枚举的属性,该方法不能实现向前兼容。
密封对象和动态对象,密封对象只能拥有在实例化时从类定义获取的固定的一组属性和方法,不能在运行时添加其他属性和方法,默认情况下,javascript创建的对象都是动态对象,即允许在运行时为对象添加其他属性和方法。具体怎么实现就不说了。反正这种方法要求比较高,都需要在use strict(执行严格模式)下才能看到,而目前只有firefox4支持。兼容性不行啦。
7.2 String类
还是介绍一些实际编程中经常用到的东西来的实在。
7.2.1 正则表达式语法
相信大家肯定看到过各种正则表达式,尤其是在验证的时候,但是总是不知道它具体什么意思,那这里就稍微普及一下。
javascript使用RegExp类来表示正则表达式,下面有三种创建方法以及一段最简单的匹配代码:
var re = /ab+c/ // (使用两个//包围,并且不带引号) var re = new RegExp("ab+c") // 创建RegExp对象 var re = new RegExp(new RegExp("ab+c"));// 使用一个RegExp对象创建另一个RegExp对象 var re = new RegExp(/ab+c/);// 就是上面那一种方法 下面的代码表示在一段字符串中匹配连续字符串abc var pattern = "abc"; var re = new RegExp(pattern); var oString = "abcefg"; document.write(re.exec(oString)); //匹配成功返回abc;失败则返回null
正则表达式文法就不说了,在javascript中,使用RegExp类的exec()和test()方法进行正则表达式匹配。exec在上面的代码中有体现了,test()就是查找字符串中是否存在一个匹配指定模式的字符串,如果存在,则返回true,否则,返回false。下面我贴出几篇文章索引:
7.2.2 String:字符串文字("tony")和String对象(new String("abc"))都可以调用String类的所有成员,但是这两者是有区别的,javascript解释引擎会自动将其转换成临时String对象,调用其方法,最后会清除临时对象。除非确实需要使用String对象(因为String对象可以有反常规的行为),否则建议使用字符串文字。String的方法参见这篇博文:JavaScript_String函数下面看一段挺有意思的代码----创建打字机效果:
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Sample</title> </head> <body> <div id = "test" style="200px;height:100px;border:2px;#ccc dashed; padding:10px"> </div> <script> //实际上是不断地在更新显示的文字,每次都多一个字,看起来就好像打印机一样的效果了。 var typingTest = "放一段文字进去,让它像打字机一样一个字一个字的打出来,显示出来"; var count = 0; var oBlock = document.getElementById("test"); function type(){ if(count <= typingTest.length){ oBlock.innerHTML = typingTest.substring(0,count); //count每次都增加一个 count++; }else{ window.clearInterval(intervalID); } } var intervalID = window.setInterval(type,200); //每200毫秒调用一次该函数 </script> </body> </html>
还有用于创建Html格式字符串的方法,下面看段代码。
var myString = "查看第一部分内容"; document.writeln(myString.anchor("section1")); //这将创建下面的命名锚点 <a name="section1">查看第一部分内容</a> var mySite = "我的BOLG"; var mySiteURL = "http://www.cnblogs.com/tonylp/"; document.write("欢迎访问"+mySite.link(mySiteURL)); //这将创建下面的超链接 欢迎访问<a href="http://www.cnblogs.com/tonylp/">我的BOLG</a>
7.3 数组,多维数组和复合数组(哈希映射)
Array(数组)是javascript中较为复杂的数据类型,同时Array也是内建的一个核心类,一个数组就是Array类的一个实例,可以使用Array类的方法和属性操作数组,javascript数组中的各元素不必为相同的数据类型,可以混合。
Array类的构造方法有3种重载形式:new Array();new Array(length);new Array(ele1,ele2,ele3);
还有一些Array API处理数组javascript的数组API,还有一些ECMAScript新增方法的使用,复合数组,克隆数组,哈希表的东西没说,以后再说了吧,今天实在没状态,顶了个鼻涕,难受死了。
7.4 使用Date类处理日期和时间
Date类用来获取运行javascript程序的操作系统的日期和时间值。常用的记住如下代码就可以了,一些更加细节的方法百度一下就可以了。
var myDate = new Date(); // 获取时间 Fri Feb 01 2013 16:01:15 GMT+0800 (中国标准时间) var myYear = myDate.getFullYear(); //获取四位数年份2013 var myMonth = myDate.getMonth()+1; //从0开始,所以需要加1 ,输出2 var myDay = myDate.getDate(); //返回Date对象的日期数,getDay返回星期数。输出1
然后么,自己重组一下日期格式就可以20130201,以这样的形式传回后台,传回数据库。
7.5 其他javascript内建类(核心对象)-Boolean,Number,Math,Function和Arguments类等
Boolean,Number都没什么好讲的啦,Math也就一些方法,就比方三角余弦,正弦,绝对值,计算平方根,计算自然对数,老实说,javascript的数字处理能力挺弱的,就知道一下就行了。
Function类有call(),apply()和bind()方法,call()方法一般都用"()"代替了。
Arguments类和arguments属性,Arguments类用来存储和访问函数的参数,它位于函数体内部,可以使用Function类的arguments属性对其进行访问。以前的代码有用到过arguments,挺好用的,arguments.length判断长度,arguments[n]获取参数
今天就写这么多吧,这几天有点事,博客更新就不定期了,预计接下来就开始bom和dom篇了。
以上全部都属个人原创,请大家转载的时候附上原创链接: http://www.cnblogs.com/tonylp