一、功能实现核心:FileSystemObject 对象。
要在javascript中实现文件操作功能,主要就是依靠FileSystemobject对象。
二、FileSystemObject编程 。
使用FileSystemObject 对象进行编程很简单,一般要经过如下的步骤: 创建FileSystemObject对象、应用相关方法、访问对象相关属性 。 。
(一)创建FileSystemObject对象 。
创建FileSystemObject对象的 。
代码只要1行:
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
上述代码执行后,fso就成为一个FileSystemObject对象实例。 。
(二)应用相关方法
创建对象实例后,就可以使用对象的相关方法了。比如,使用CreateTextFile方法创建一个文本文件: 。
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
var f1 = fso.createtextfile("c://myjstest.txt",true"); 。
(三)访问对象相关属性
要访问对象的相关属性,首先要建立指向对象的句柄,这就要通过get系列方法实现:GetDrive负责获取驱动器信息,GetFolder负责获取文件夹信息,GetFile负责获取文件信息。比如,指向下面的代码后,f1就成为指向文件c:/test.txt的句柄: 。
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
var f1 = fso.GetFile("c://myjstest.txt"); 。
然后,使用f1访问对象的相关属性。比如: 。
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
var f1 = fso.GetFile("c://myjstest.txt"); 。
alert("File last modified: " + f1.DateLastModified); 。
执行上面最后一句后,将显示c:/myjstest.txt的最后修改日期属性值。 。
但有一点请注意:对于使用create方法建立的对象,就不必再使用get方法获取对象句柄了,这时直接使用create方法建立的句柄名称就可以: 。
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
var f1 = fso.createtextfile("c://myjstest.txt",true"); 。
alert("File last modified: " + f1.DateLastModified); 。
三、操作驱动器(Drives) 。
使用FileSystemObject对象来编程操作驱动器(Drives)和文件夹(Folders)很容易,这就象在Windows文件浏览器中对文件进行交互操作一样,比如:拷贝、移动文件夹,获取文件夹的属性。 。
(一)Drives对象属性
Drive对象负责收集系统中的物理或逻辑驱动器资源内容,它具有如下属性: 。
l TotalSize:以字节(byte)为单位计算的驱动器大小。 。
l AvailableSpace或FreeSpace:以字节(byte)为单位计算的驱动器可用空间。 。
l DriveLetter:驱动器字母。 。
l DriveType:驱动器类型,取值为:removable(移动介质)、fixed(固定介质)、network(网络资源)、CD-ROM或者RAM盘。 。
l SerialNumber:驱动器的系列码。 。
l FileSystem:所在驱动器的文件系统类型,取值为FAT、FAT32和NTFS。 。
l IsReady:驱动器是否可用。 。
l ShareName:共享名称。 。
l VolumeName:卷标名称。 。
l Path和RootFolder:驱动器的路径或者根目录名称。 。
(二)Drive对象操作例程 。
下面的例程显示驱动器C的卷标、总容量和可用空间等信息: 。
var fso, drv, s =""; 。
fso = new ActiveXObject("Scripting.FileSystemObject"); 。
drv = fso.GetDrive(fso.GetDriveName("c://")); 。
s += "Drive C:" + " - "; 。
s += drv.VolumeName + "/n"; 。
s += "Total Space: " + drv.TotalSize / 1024; 。
s += " Kb" + "/n"; 。
s += "Free Space: " + drv.FreeSpace / 1024; 。
s += " Kb" + "/n"; 。
alert(s);
四、操作文件夹(Folders) 。
涉及到文件夹的操作包括创建、移动、删除以及获取相关属性。 。
Folder对象操作例程 : 。
下面的例程将练习获取父文件夹名称、创建文件夹、删除文件夹、判断是否为根目录等操作: 。
var fso, fldr, s = ""; 。
// 创建FileSystemObject对象实例 。
fso = new ActiveXObject("Scripting.FileSystemObject"); 。
// 获取Drive 对象
fldr = fso.GetFolder("c://"); 。
// 显示父目录名称
alert("Parent folder name is: " + fldr + "/n"); 。
// 显示所在drive名称 。
alert("Contained on drive " + fldr.Drive + "/n"); 。
// 判断是否为根目录
if (fldr.IsRootFolder) 。
alert("This is the root folder."); 。
else
alert("This folder isn't a root folder."); 。
alert("/n/n"); 。
// 创建新文件夹
fso.CreateFolder ("C://Bogus"); 。
alert("Created folder C://Bogus" + "/n"); 。
// 显示文件夹基础名称,不包含路径名 。
alert("Basename = " + fso.GetBaseName("c://bogus") + "/n"); 。
// 删除创建的文件夹
fso.DeleteFolder ("C://Bogus"); 。
alert("Deleted folder C://Bogus" + "/n"); 。
五、操作文件(Files)
对文件进行的操作要比以上介绍的驱动器(Drive)和文件夹(Folder)操作复杂些,基本上分为以下两个类别:对文件的创建、拷贝、移动、删除操作和对文件内容的创建、添加、删除和读取操作。下面分别详细介绍。 。
(一)创建文件
一共有3种方法可用于创建一个空文本文件,这种文件有时候也叫做文本流(text stream)。 。
第一种是使用CreateTextFile方法。代码如下: 。
var fso, f1;
fso = new ActiveXObject("Scripting.FileSystemObject"); 。
f1 = fso.CreateTextFile("c://testfile.txt", true);。
第二种是使用OpenTextFile方法,并添加上ForWriting属性,ForWriting的值为2。代码如下: 。
var fso, ts;
var ForWriting= 2; 。
fso = new ActiveXObject("Scripting.FileSystemObject"); 。
ts = fso.OpenTextFile("c://test.txt", ForWriting, true);。
第三种是使用OpenAsTextStream方法,同样要设置好ForWriting属性。代码如下: 。
var fso, f1, ts; 。
var ForWriting = 2; 。
fso = new ActiveXObject("Scripting.FileSystemObject"); 。
fso.CreateTextFile ("c://test1.txt"); 。
f1 = fso.GetFile("c://test1.txt"); 。
ts = f1.OpenAsTextStream(ForWriting, true);。
(二)添加数据到文件
当文件被创建后,一般要按照“打开文件->填写数据->关闭文件”的步骤实现添加数据到文件的目的。 。
打开文件可使用FileSystemObject对象的OpenTextFile方法,或者使用File对象的OpenAsTextStream方法。 。
填写数据要使用到TextStream对象的Write、WriteLine或者WriteBlankLines方法。在同是实现写入数据的功能下,这3者的区别在于:Write方法不在写入数据末尾添加新换行符,WriteLine方法要在最后添加一个新换行符,而WriteBlankLines则增加一个或者多个空行。 。
关闭文件可使用TextStream对象的Close方法。 。
(三)创建文件及添加数据例程 。
下面的代码将创建文件、添加数据、关闭文件几个步骤结合起来进行应用: 。
var fso, tf;
fso = new ActiveXObject("Scripting.FileSystemObject"); 。
// 创建新文件
tf = fso.CreateTextFile("c://testfile.txt", true); 。
// 填写数据,并增加换行符 。
tf.WriteLine("Testing 1, 2, 3.") ; 。
// 增加3个空行
tf.WriteBlankLines(3) ; 。
// 填写一行,不带换行符
tf.Write ("This is a test."); 。
// 关闭文件
tf.Close();
(四)读取文件内容
从文本文件中读取数据要使用TextStream对象的Read、ReadLine或ReadAll 方法。Read方法用于读取文件中指定数量的字符; ReadLine方法读取一整行,但不包括换行符;ReadAll方法则读取文本文件的整个内容。读取的内容存放于字符串变量中,用于显示、分析。 。
方法或者属性 描述
BuildPath()
生成一个文件路径
CopyFile() 复制文件 。
CopyFolder() 复制目录 。
CreateFolder() 创建新目录 。
CreateTextFile() 生成一个文件 。
DeleteFile() 删除一个文件 。
DeleteFolder() 删除一个目录 。
DriveExists() 检验盘符是否存在 。
Drives 返回盘符的集合 。
FileExists() 检验文件是否存在 。
FolderExists 检验一个目录是否存在 。
GetAbsolutePathName() 取得一个文件的绝对路径 。
GetBaseName() 取得文件名 。
GetDrive() 取得盘符名 。
GetDriveName() 取得盘符名 。
GetExtensionName() 取得文件的后缀 。
GetFile() 生成文件对象 。
GetFileName() 取得文件名 。
GetFolder() 取得目录对象 。
GetParentFolderName 取得文件或目录的父目录名 。
GetSpecialFolder() 取得特殊的目录名 。
GetTempName() 生成一个临时文件对象 。
MoveFile() 移动文件 。
MoveFolder() 移动目录 。
OpenTextFile() 打开一个文件流 。
f.Files //目录下所有文件集合 。
f.attributes //文件属性 。
Case 0 Str="普通文件。没有设置任何属性。 " 。
Case 1 Str="只读文件。可读写。 " 。
Case 2 Str="隐藏文件。可读写。 " 。
Case 4 Str="系统文件。可读写。 " 。
Case 16 Str="文件夹或目录。只读。 " 。
Case 32 Str="上次备份后已更改的文件。可读写。 " 。
Case 1024 Str="链接或快捷方式。只读。 " 。
Case 2048 Str=" 压缩文件。只读。" 。
f.Datecreated // 创建时间 。
f.DateLastAccessed //上次访问时间 。
f.DateLastModified // 上次修改时间 。
f.Path //文件路径
f.Name //文件名称
f.Type //文件类型
f.Size // 文件大小(单位:字节) 。
f.ParentFolder //父目录 。
f.RootFolder // 根目录 。
实例说明
BuildPath(路径,文件名) //这个方法会对给定的路径加上文件,并自动加上分界符 。
<SCRIPT LANGUAGE="JavaScript"> 。
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
var newpath = fso.BuildPath("c://tmp", "51js.txt"); //生成 c:/tmp/51js.txt的路径 。
alert(newpath); 。
-->
</SCRIPT> 。
CopyFile(源文件, 目标文件, 覆盖) //复制源文件到目标文件,当覆盖值为true时,如果目标文件存在会把文件覆盖 。
<SCRIPT LANGUAGE="JavaScript"> 。
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
var newpath = fso.CopyFile("c://autoexec.bat", "d://autoexec.bak"); 。
-->
</SCRIPT> 。
CopyFolder(对象目录,目标目录 ,覆盖) //复制对象目录到目标目录,当覆盖为true时,如果目标目录存在会把文件覆盖 。
<SCRIPT LANGUAGE="JavaScript"> 。
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
fso.CopyFolder("c://WINDOWS//Desktop", "d://"); //把C盘的Desktop目录复制到D盘的根目录 。
-->
</SCRIPT> 。
CreateFolder(目录名) //创建一个新的目录 。
<SCRIPT LANGUAGE="JavaScript"> 。
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
var newFolderName = fso.CreateFolder("c://51JS"); //在C盘上创建一个51JS的目录 。
-->
</SCRIPT> 。
CreateTextFile(文件名, 覆盖) //创建一个新的文件,如果此文件已经存在,你需要把覆盖值定为true 。
<SCRIPT LANGUAGE="JavaScript"> 。
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
var newFileObject = fso.CreateTextFile("c://autoexec51JS.bat", true); //脚本将在C盘创建一个叫 autoexec51JS.bat的文件 。
-->
</SCRIPT> 。
DeleteFile(文件名, 只读?) //删除一个文件,如果文件的属性是只读的话,你需要把只读值设为true 。
<SCRIPT LANGUAGE="JavaScript"> 。
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); //为了安全我先把要删除的autoexec.bat备份到你的D盘 。
var newpath = fso.CopyFile("c://autoexec.bat", "d://autoexec.bat"); //把C盘的autoexec.bat文件删除掉 。
fso.DeleteFile("c://autoexec.bat", true); 。
-->
</SCRIPT> 。
DeleteFolder(文件名, 只读?)//删除一个目录,如果目录的属性是只读的话,你需要把只读值设为true 。
<SCRIPT LANGUAGE="JavaScript"> 。
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
fso.CopyFolder("c://WINDOWS//Desktop", "d://"); //为了安全我先把你C盘的Desktop目录复制到你D盘的根目录 。
fso.DeleteFolder("c://WINDOWS//Desktop", true); //把你的Desktop目录删除,但因为desktop是系统的东西,所以不能全部删除,但......... 。
-->
</SCRIPT> 。
DriveExists(盘符) //检查一个盘是否存在,如果存在就返会真,不存在就返回....... 。
<SCRIPT LANGUAGE="JavaScript"> 。
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
hasDriveD = fso.DriveExists("d"); //检查系统是否有D盘存在 。
hasDriveZ = fso.DriveExists("z"); //检查系统是否有Z盘存在 。
if (hasDriveD) alert("你的系统内有一个D盘"); 。
if (!hasDriveZ) alert("你的系统内没有Z盘"); 。
-->
</SCRIPT> 。
FileExists(文件名) //检查一个文件是否存在,如果存在就返会真,不存在就返回....... 。
<SCRIPT LANGUAGE="JavaScript"> 。
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
fileName = fso.FileExists("c://autoexec.bat"); 。
if (fileName) alert("你在C盘中有autoexec.bat文件,按下确定后这个文件将被删除!"); //开个玩笑:) 。
-->
</SCRIPT> 。
FolderExists(目录名) //检查一个目录是否存在,如果存在就返会真,不存在就返回....... 。
<SCRIPT LANGUAGE="JavaScript"> 。
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
folderName = fso.FolderExists("c://WINDOWS//Fonts"); 。
if (folderName) alert("按下确定后系统的字库将被删除!"); //开个玩笑:) 。
-->
</SCRIPT> 。
GetAbsolutePathName(文件对象) //返回文件对象在系统的绝对路径 。
<SCRIPT LANGUAGE="JavaScript"> 。
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
pathName = fso.GetAbsolutePathName("c://autoexec.bat"); 。
alert(pathName); 。
-->
</SCRIPT> 。
GetBaseName(文件对象) //返回文件对象的文件名 。
<SCRIPT LANGUAGE="JavaScript"> 。
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
baseName = fso.GetBaseName("c://autoexec.bat"); //取得autoexec.bat的文件名autoexec 。
alert(baseName); 。
-->
</SCRIPT> 。
GetExtensionName(文件对象) //文件的后缀 。
<SCRIPT LANGUAGE="JavaScript"> 。
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
exName = fso.GetExtensionName("c://autoexec.bat"); //取得autoexec.bat后缀bat 。
alert(exName); 。
-->
</SCRIPT> 。
GetParentFolderName(文件对象) //取得父级的目录名 。
<SCRIPT LANGUAGE="JavaScript"> 。
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
parentName = fso.GetParentFolderName("c://autoexec.bat"); //取得autoexec.bat的父级目录C盘 。
alert(parentName); 。
-->
</SCRIPT> 。
GetSpecialFolder(目录代码) //取得系统中一些特别的目录的路径,目录代码有3个分别是 0:安装Window的目录 1:系统文件目录 2:临时文件目录 。
<SCRIPT LANGUAGE="JavaScript"> 。
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
tmpFolder = fso.GetSpecialFolder(2); //取得系统临时文件目录的路径 如我的是 C:/windows/temp 。
alert(tmpFolder); 。
-->
</SCRIPT> 。
GetTempName() //生成一个随机的临时文件对象,会以rad带头后面跟着些随机数,就好象一些软件在安装时会生成*.tmp 。
<SCRIPT LANGUAGE="JavaScript"> 。
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
tmpName = fso.GetTempName(); //我在测试时就生成了radDB70E.tmp 。
alert(tmpName); 。
-->
</SCRIPT> 。
MoveFile(源文件, 目标文件) //把源文件移到目标文件的位置 。
<SCRIPT LANGUAGE="JavaScript"> 。
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); 。
var newpath = fso.MoveFile("c://autoexec.bat", "d://autoexec.bat"); //把C盘的autoexec.bat文件移移动到D盘 。
-->
1.JavaScript 的事件处理是所有浏览器端程序的基本必备技巧。当目标元素的事件被触发时,比如按钮被点击,鼠标移动,或者是表单提交,这些事件触发时都可以触发对应的方法。当然这个过程中我们可以传递一些参数过去来自定义很多事情。
一个要注意避免的就是事件与DOM元素的紧耦合。比如先看看下面这个代码,考虑到用一个简单表单来接受用户输入的信息。
<form id="msgbox" action="#" method="get">。
<label for="msg">your message</label>。
<input id="msg" value="" />。
<button>SEND</button>。
</form>
2.我们能写一段代码让屏幕上显示刚才表单提交的信息。
document.getElementById("msgbox").addEventListener("submit", function(e) {。
e.preventDefault();。
var msg = e.currentTarget.getElementById("msg").value.trim();。
if (msg) {
alert(msg);
}, false);
那么如果我们想对显示出来的这句话做一些操作,比如发一条tweet,或存储在服务器或者干些其他什么?则有两个选择:
1,对已有的事件处理方法添加代码。
这个方案的缺陷就是每当打算测试或者更新后来添加的事件处理方法时变得非常不弹性化,每当更改或者删除一些功能的时候,总会有一大段代码要跟着去修改。
2,为每一个功能都创建事件处理方法。
第二个方法很好的解决了前面方法的问题,虽然这个方法可能会一开始麻烦点。毕竟所有的方法代码都要处理重复的消息提取以及验证步骤。
设想假如能够自行触发自定义的"newMessage"事件而无需验证是否有message提交,或假如能监控整个HTML文档或者body这样的标签而不仅仅只是某个表单的节点,能否做到呢?这就是自定义事件要解决的问题了。
自行触发一个自定义事件是很简单的;如下代码就是传递一个name,details以及options到新建的 CustomEvent对象中:。
var event = new CustomEvent(。
"newMessage",
detail: {
message: "Hello World!",。
time: new Date(),。
},
bubbles: true,
cancelable: true。
);
这个案例中,"newMessage"是一个自定义事件类型。而第二个参数包含了此对象的三个属性(detail,bubbles,cancelable)。
detail: 包含了自定义事件的具体信息,这里仅仅就包括了一个message与一个time。
bubbles: 如果是true,则事件会一直传递给自身的父对象元素,接着父对象也会触发此类事件。
cancelable: 如果是true, 事件可以被事件触发元素的 stopPropagation( ) 方法停止。
现在,我们需要针对某个特定元素来触发此类事件。
document.getElementById("msgbox").dispatchEvent(event);。
call和apply的详解
call()方法
用于操作this的函数方法是call(),它可以指定的this值和参数来执行函数。call()的第一个参数指定了函数执行时this的值,其后的所有参数都是需要被传入函数的参数。
apply()方法
apply()是你可以用来操作this的第二个函数方法。apply()的工作方式和call()完全一样,但它只能接受两个参数: this 的值和一个数组或者类似数组的对象,内含需要被传入函数的参数(也就是说你可以把arguments对象作为apply()的第二个参数)。你不需要像使用call()那样一个个指定参数,而是可以轻松传递整个数组给apply()。除此之外,call()和apply()表现得完全一样。
bind()方法
改变this的第三个函数方法是bind()。ECMAScript 5中新加的这个方法和之前那两个颇有不同。按惯例,bind()的第一个参数是要传给新函数的this的值。其他所有参数代表需要被永久设置在新函数中的命名参数。你可以在之后继续设置任何非永久参数。
call和apply的区别
代码案例:
资料来源:
HTML5学堂
决胜前端
什么是javascript
JavaScript是一种能让你的网页更加生动活泼的程式语言,也是目前网页中设计中最容易学又最方便的语言。你可以利用JavaScript轻易的做出亲切的欢迎讯息、漂亮的数字钟、有广告效果的跑马灯及简易的选举,还可以显示浏览器停留的时间。让这些特殊效果提高网页的可观性。
javascript使用目的
JavaScript的目的在于为网站增加可用性,而不是破坏用户的隐私和安全。因此JavaScript不允许读写用户的文件(cookies除外),采取同源策略,只允许来自相同域的交互。不允许读取历史记录,不能为上传文件的表单设置值,由JavaScript控制的窗口关闭需经用户确认,由JavaScript打开的窗口不能小于100×100的窗口,不能移出屏幕之外。
JavaScript基本特点
一、简单性
JavaScript是一种基于Java基本语句和控制流之上的简单而紧凑的设计,从而对于学习Java是一种非常好的过渡。它的变量类型是采用弱类型,并未使用严格的数据类型。
二、动态性
JavaScript是动态的,它可以直接对用户或客户输入做出响应,无须经过Web服务程序。它对用户的反映响应,是采用以事件驱动的方式进行的。所谓事件驱动,就是指在主页(Home Page)中执行了某种操作所产生的动作,就称为“事件”(Event)。比如按下鼠标、移动窗口、选择菜单等都可以视为事件。当事件发生后,可能会引起相应的事件响应。
三、跨平台性
JavaScript是依赖于浏览器本身,与操作环境无关,只要能运行浏览器的计算机,并支持JavaScript的浏览器就可正确执行。从而实现了“编写一次,走遍天下”的梦想。
四、安全性
JavaScript是一种安全性语言,它不允许访问本地的硬盘,并不能将数据存入到服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互。从而有效地防止数据的丢失。
先说说学js的条件
论条件,咱是文科生,大学专业工商管理,和计算机毛关系都没;有人说英语,读了四年大学,很遗憾,咱还四级没混过;就咱这条件都学得乐呵呵的,您还等啥。
当然学习JS也是有门槛的,就是你的html和css至少还比较熟练,您不能连<body>这东东是干啥的都不知道就开始上JS了,学乘除前,学好加减法总是有益无害的。
再说几点忠告
1,不要着急看一些复杂网页效果的代码,这样除了打击你自信心,什么也学不到。没达到一定的武功水平,割了小JJ也学不会葵花宝典的。
2,别急着加技术交流QQ群,加牛人QQ。如果你找张三丰交流武功,你上去第一句问“丰哥,where is 丹田?”,你会被他一掌劈死的。
3,看网上什么多少天精通JS,啥啥啥从入门到精通,这种教程直接跳过吧,太多的事实证明,以一种浮躁的心态去做任何事都会以失败而告终。
4,千万别去弄啥电脑培训,花了钱和时间不说,关键是学不到东西。本来你买两本好书自学3个月能学会的,他们硬是能折腾你两年。
推荐几本好书
“超毛,你丫吹了半天牛B,还是没说怎么学啊”
呵呵,我也没啥特别的办法,只是推荐几本好书。推荐的书,得按先后顺序看。别第一本没看完,就急着上第二本,并不是每次“穿越”都能成功的。
第一阶段:《JavaScript DOM编程艺术》
看这本书之前,请先确认您对Javascript有个基本的了解,应该知道if else之类的语法,如果不懂,先去看看我第二阶段推荐的《Javascript高级程序设计》的前三章,记住看三章就别往下看了,回到《JavaScript DOM编程艺术》这本书上来。
学习Javascript用《JavaScript DOM编程艺术》来入门最好不过了,老老实实看两遍,看完了你就会对JS有一个大概的了解,整本书都围绕着一个网页效果例子展开,你跟着老老实实敲一篇,敲完之后,你会发现这个效果不是常在网页中看到么,发现自己也能做出来网上的效果了,嘿嘿,小有成就感吧。
第二阶段:《JavaScript高级程序设计》
有的书是用来成为经典的,比如犀牛书;还有些书是用来超越经典的,显然这本书就是这种。书中章章经典,由浅入深,其中第6章,关于JS面向对象的解说,没有教程出其右。
如果有一场满分100分的JS考试,看了《JavaScript DOM编程艺术》能让你拿到20分,那么看完这本书,你就能拿到60分以上了。学完后,你会成就感倍增的,相信我(至少看两遍,推荐三篇,跟着书上的代码一行行的敲)。
这本书强烈推荐购买,写的太TMD牛逼了,给你带来的价值超过百倍千倍。
这本书最新的是第三版,貌似就是前些日子出来的,我看的是第二版,第三版相对第二版变动不大,添加了几章内容,价格目前相差10元左右。
接下来,恭喜你可以下山了,这个时候可以自己做一些事情了。
你可以去Ferris这个教程看看他写的这些效果,看看源代码,怎么样,是不是觉得有一部分很简单了,尝试着跟着他写一写这些效果吧。
学技术闭门造车是行不通的,适当的加一两个QQ群交流(注重质量),常去论坛逛逛,你会经常有些小收获的。加群可以先记下175依次写下161最后填写984最后把这些连接起来就可以 找到组织(扣裙)
再有就是看前辈这些牛人前辈们分享的文章,它会让你的学习事半功倍的,这里是热心人收集的国内一些牛人的博客、个人网站,点这里。
第三阶段:《JavaScript语言精粹》和《高性能JavaScript》
接下来两本书《JavaScript语言精粹》和《高性能JavaScript》算是JS高级教程的补充,里面有一些内容和JS高级教程重复了,两本书可以同时看,都不厚,可以对前面所学的有一个很好的加强和巩固。
第四阶段:《JavaScript DOM高级程序设计》和《JavaScript设计模式》
在吃透了前面所说的书之后,接下来两本书的顺序已经无关紧要了,《JavaScript DOM高级程序设计》(注意和《JavaScript 高级程序设计》相区别)和《JavaScript设计模式》,这两本都是重量级的书,能让你的JS技术上一个新的台阶;这两本书前者主修炼外功,后者主修炼内功,有点想乾坤大挪移和九阳神功的关系。
《JavaScript DOM高级程序设计》 首先教你搭建一个类似JQuery的额工具函数库,然后通过讲解几个实际中经常遇到的几个应用例子,会让初学者受益匪浅。
《JavaScript设计模式》主要讲Javascript的设计模式,说实话,翻译的质量很一般,有些生硬,但已经基本不影响你的学习,看代码完全可以理解出自己的意思。
这两本书出来一段时间了,可能买不着了,提供下载地址:
《JavaScript DOM高级程序设计》下载地址,注意有三部分需要下载。
《JavaScript设计模式》下载地址。
最后想说的
不安逸,不浮躁。任何学习都不是一蹴而就的,牛B就是一个学习积累的过程,别指望两三个月,你的水平就多么厉害。倚天屠龙记里面的武功最牛B的是张三丰,而不是张无忌。
任何工作都需要多种技能,别忽略了html, css等其他知识的学习。