那些年,我还在学习javascript
那些年学习web开发的第三课,就是javascript了,javascript一门动态语言并是基于对象有语言,用来完成页面上的一些动画效果和DOM操作,在表单中还用于客户端验证数据。即然是一门语言,就有其它语言相似的东西.比如说语法等,那些年觉得不同的主要是javascript中的闭包、类、类的继承等,所以下面在学习一下,当然也只是个人想法。
1、 闭包:简单的说闭包就是函数中的函数,类中的类,在内层函数中能使用外层函数的变量,从而使得内层函数保存了外层函数的值;如果在外层函数定义了一个变量,那么就会为该变量分配内存空间,若在内层函数中保存了这个变量,也就是说内外二个变量指向同一内存空间,那么在外层函数调用完了以后,内层中变量引用的空间还在,就是说,闭包能将变量保存在内存中下次使用,但过多的使用闭包会导致内存泄漏的问题。
2、 类:javascript中的函数就是一个类,同样可以新建一个对象,还有一些内置的类,比如说Object、String等,举个例子来看一下怎么使用的:
代码:
<script type="text/javascript"> var demoFun=function(){ this.name="xin_ny"; this.age=18; this.weibo="QQ"; this.toString=function(){ return this.name+this.age+this.weibo; } } var object=new demoFun(); alert(object.toString()); </script>
效果:
其实javascript中类的实现还有几种方法,比如说使用Object、构造函数、原型法,上例中还重写了原本的toString()方法,不然就弹出对象类型了。
3、 类的继承:有类那么就会有类的继承,类的继承也有几种,当时在一本javascript高级书上讲得很细,主要分为:对象冒充、call()、apply()、原型方式,记忆中最深刻的是原型方法,下面就用它举个例子吧:
代码:
<script type="text/javascript"> var demoFun=function(){ this.name="xin_ny"; this.age=18; this.weibo="QQ"; this.toString=function(){ return this.name+this.age+this.weibo; }} var ClassB=function(){ this.name="B"; } var temp=new demoFun(); ClassB.prototype=temp; delete temp; var object=new ClassB(); alert(object.toString()); </script>
效果:
例子中覆写了父类的name属性。
4、 eval():使用其简单的说可以把字符串解析成对象,也可以执行js代码,应说它是javascript中最强大的功能之一,同样举一个例子。
代码:
var str="alert('json')"; eval(str);
效果:
行了,对于javascript的一些知识先说到这里,其实这些都还好理解,难在应用还有各个浏览器之间的兼容,浏览器解析的规则,对于这些了解得不算多,但JQuery帮了我们很大的忙,所以那些年也学习了JQuery,下面以一个例子来学习javascript的应用。
5、 图片幻灯片例子,这是一个那些学习js的例子,所以代码不是现在所写,当然那时也引用了一些网络中的代码,请包涵。
代码:
var map = document.getElementsByTagName("a"); var len = map.length; var i = 0; var img = document.createElement("img"); img.setAttribute("id", "img1"); img.setAttribute("src",map[i]); img.style.width = "400"; img.style.height = "300"; img.setAttribute("width", "400"); img.setAttribute("height", "400"); document.body.appendChild(img); var id = 1.0; var imgIM; function display() { if (i == map.length) { i = 0; } else { ++i; } var img = document.getElementById("img1"); if (getOs() == "MSIE") { var tr = Math.floor(Math.random() * 23); img.style.filter = "revealTrans(duration=2,transition=" + tr + "),blendTrans(Duration=3)"; img.filters[0].apply(); img.setAttribute("src", map[i]); img.filters[0].play(); } else { imgOut = img; inT = setInterval("ff();", 25); img.setAttribute("src", map[i]); } mymap = setTimeout("display();", 5000); } var ff = function() {//ff下淡出 if (id == -1) { id = 1.0; clearInterval(inT); } else { imgOut.style.opacity = id; id = imgOut.style.opacity - 0.01; } } var ff1 = function() { if (id2 == 1) { id2 = -1; clearInterval(Int); } else { imgIM1.style.opacity = id2; id2 = imgIM.style.opacity + 0.01; } } function getOs() {//判断浏览器 var OsObject = ""; if (navigator.userAgent.indexOf("MSIE") > 0) { return "MSIE"; } if (isFirefox = navigator.userAgent.indexOf("Firefox") > 0) { return "Firefox"; } if (isSafari = navigator.userAgent.indexOf("Safari") > 0) { return "Safari"; } if (isCamino = navigator.userAgent.indexOf("Camino") > 0) { return "Camino"; } if (isMozilla = navigator.userAgent.indexOf("Gecko/") > 0) { return "Gecko"; } }
效果:
IE:
FF:
那些年学习javscript时,觉得网上的js特效看起来很爽,后来才发觉要自已写确实有难度,所以后来就在项目中用网上JQuery的特效,这样来得也快,当然js还是有用的,比如表单数据的验证,以及Ajax时数据的处理等 ,还有DOM操作,现在的js中添加了新的DOM方法,getElementByClassName()等,还有新的属性classList:多个className。
总结:
那些年一步一步的走向web开发之路,此文以记忆那些奋斗的时光。