Javascript 学习书 推荐


Posted in Javascript onJune 13, 2009

Aaron Gustafson著,李松峰 李雅雯 等译。感觉绝对是一本值得看的书。感兴趣的朋友可以看一下。下面是我从其中抽出来的javascript常见陷阱和对象的概念整理出来的。希望对大家能有一些帮助。

Ø Javascript语法中常见的陷阱

² 区分大小写

² 单引号和双引号实际上是没有特殊的区别的,这点我是从看了这本书才开始真正的知道,虽然在以前写程序时写过‘'号的字符串形式,但是却没有先觉性的发现“哦,原来这样也可以。”

另外大多数情况下还都是用‘'来表示字符串的,因为XHTML规范要求所有XHTML属性值都用“”括起来。这样混合代码时会很清晰。

² 换行,千万不要忽略这一点。因为如果在一个字符串中你用了回车做换行那么对不起了,浏览器会告诉你我不认识你的字符串。因为它会自动将回车转换成”;“但是为了解决这个问题,还好它提供了一个转义字符作为替代。如下所示:

var='<h2 class=”a”>A list</h2>\

<ol>\

<li class=”a”></li>\

</ol>'

有人会说可以用加号的,这些我知道。用加号作为字符串的操作符。估计是底层进行了+号的重载(?!)。

² 可选的分号和花括号

如果你不相信,我告诉你这是可以的。可以说这点javascript做的还是比较智能的。但是和前述那本书作者一样,我想我们做程序员还是规规矩矩些比较好。

² 重载

有时候或许你会突发奇想曲做一个javascript的重载函数,你会发现这时候竟然只有最后一个可以运行,前面的都没有得到录用机会。这是什么原因呢?

原来,先前的某某已经被后面的给替换掉了。也就是通常说的覆盖。再进一步说就是程序只引用作用域链中的最后一个同名函数。

² 匿名函数

不得不说这个家伙很有用。

² 作用域解析和闭包

这个作用域相信大家都比较熟悉,因为每个编程语言都有这样的概念。

而作用域链是用来描述一种路径的属于,沿着该路径可以确定变量的值(或者当函数被调用时要使用的方法)

闭包是与作用域相关的一个概念,它指的是内部函数即使在外部哈数执行完成并终止以后,仍然可以访问其外部函数的属性。当引用一个变量或方法时,javascript会沿着由对象执行路径构成的作用域链进行解析,查找变量最近定义的值。一旦找到,即使用该值。

² 迭代对象

不要怀疑这用的不好的话,很可能会产生错误。不信就看这一个例子:

var all=document.getElementsByTagName(‘*');

for(i in all){

//对all[i]元素进行操作。

}

由于返回的会分别等于length、item和namedItem,而这个很可能会导致代码中出现意外错误。

这时要做一下处理。用hasOwnProperty进行属性过滤,这个函数在对象的属性或方法是非继承的时返回true。方法如下:

var all=document.getElementsByTagName(‘*');

for(i in all){

if(!all.hasOwnProperty(i)){continue;}

//对all[i]元素进行操作。

}

² 函数的调用和引用。

注意了,这是不同的,调用会执行,引用只会给变量一个copy(好像可以这样理解吧?)

看下这个:

var foo=exampleFunction();

var foo=exampleFunction;

这两句式不一样的。前一个是执行exampleFunction这个函数并将返回值赋给变量foo,而后一个却是将exampleFunction这个函数的引用赋给foo。

Ø Javascript对象

属性和方法的概念相信大家都晓得。下面讲下javascript中的对象和其中的玄奥妙义(讲的跟武侠似的)。

1. 继承

Javascript的继承让我很奇怪,但是想过之后感觉还是有道理的。而且和其他的还是一样的思想。其实javascript就是做了一个复制的操作。闲话不说看一个例子相信大家都会清楚了。

//创建一个person对象的实例

var person={};

person.getName=function(){……};

person.getAge=function(){……};

//创建一个employee对象的实例

var employee={};

employee.getTitle=function(){……};

enployee.getSalary=function(){……};
//从person对象中继承方法

employee.getName=person.getName;

employ.getAge=person.getAge;

2. 创建自己的对象

有两种方式可以创建自己的对象:

第一种:var myObject =new Object();

第二种:var myObject={};//是第一种的简写形式。实际上面已经用到了。

3. 创建构造函数

第一种:function myConstructor(a){

//代码

}

不要惊讶,想象前面说的javascript中到处都是对象,虽然有些夸张。这个函数一时一个对象。

第二种:

或许聪明的读者已经猜出来了,就是函数定义的另外两种类型:

var myConstructor=function(a){};

第三种也一起写出来吧:var myConstructor=new Function(‘a',/*某些代码*/);

不过对于这种方式,因为会导致性能问题,所以还是用function比较妥当。

最后给个书中的例子:

function myConstructor(message){

alert(message);

this.myMessage=message;

}

var myObject =new myConstructor(‘Instantiating myObject!');

4. 添加静态方法

var myObject={};

//添加属性

myObject.name=”Jeff”;

//添加方法

myObject.alertName=function(){

alert(this.name);

}

//执行方法

myObject.alertName();

相信大家都能看明白,不说了。

5. 想原型中添加公有方法

添加公有方法的方式是用prototype,注意这里的prototype可不是那个js库。

//创建构造函数

function myConstructor(message){

alert(message);

this.myMessage=message;

}

//添加一个公有方法

myConstructor.prototype.clearMessage=function(string){

this.myMessage+=''+string;

}

这里面要提的一点是 构造函数中凡是以var开头的变量全部是私有变量,不是以.号和prototype添加而是直接写入构造函数中的为私有函数。

6. 最后提一下对象字面量

对象字面量对于代码的重构,冗余度的减小都很有帮助。所以如果可能的话最好用这种

看下下面的例子:

var myObject={

propertyA:'value',

propertyB:'value',

methodA:function(){}

}

不得不同意作者的观点,这种方式很优雅。

怎么样?是不是对Javascript中的对象和陷阱有了一些基本的认识?希望这篇文章对你有所帮助。

Javascript 相关文章推荐
JS 容错处理代码, 屏蔽错误信息
Mar 09 Javascript
javascript 类型判断代码分析
Mar 28 Javascript
js读取本地excel文档数据的代码
Nov 11 Javascript
js+html+css实现鼠标移动div实例
Jan 30 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
Sep 24 Javascript
jQuery中is()方法用法实例
Jan 06 Javascript
详解AngularJS中ng-src指令的使用
Sep 07 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
May 26 Javascript
jquery 一键复制到剪切板的实例
Sep 20 jQuery
关于JavaScript语句后面的分号问题
Dec 07 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
Mar 28 Javascript
javascript实现的时间格式加8小时功能示例
Jun 13 Javascript
javascript 框架小结 个人工作经验
Jun 13 #Javascript
动态刷新 dorado树的js代码
Jun 12 #Javascript
firefo xml 读写实现js代码
Jun 11 #Javascript
犀利的js 函数集合
Jun 11 #Javascript
js 操作css实现代码
Jun 11 #Javascript
图片连续滚动代码[兼容IE/firefox]
Jun 11 #Javascript
Javascript Tab 导航插件 (23个)
Jun 11 #Javascript
You might like
php下的权限算法的实现
2007/04/28 PHP
php设计模式 Template (模板模式)
2011/06/26 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
PHP防盗链代码实例
2014/08/27 PHP
php中file_get_contents与curl性能比较分析
2014/11/08 PHP
php获取CSS文件中图片地址并下载到本地的方法
2014/12/02 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
Jquery 基础学习笔记
2009/05/29 Javascript
jquery UI 1.72 之datepicker
2009/12/29 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
JavaScript获取网页支持表单字符集的方法
2015/04/02 Javascript
js运动应用实例解析
2015/12/28 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
2018/12/05 Javascript
小程序接口的promise化的实现方法
2019/12/11 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
基于javascript的无缝滚动动画1
2020/08/07 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
python中append实例用法总结
2019/07/30 Python
python分布式编程实现过程解析
2019/11/08 Python
使用Python实现画一个中国地图
2019/11/23 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
python中pyqtgraph知识点总结
2021/01/26 Python
全球销量第一生发产品:Viviscal
2017/12/21 全球购物
大学生毕业自我评价范文分享
2013/11/11 职场文书
企业承诺书怎么写
2014/05/24 职场文书
机械专业求职信
2014/05/25 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
本科毕业论文致谢怎么写
2015/05/14 职场文书
2016初一新生军训心得体会
2016/01/11 职场文书
党性教育心得体会(共6篇)
2016/01/21 职场文书
安装Windows Server 2012 R2企业版操作系统并设置好相关参数
2022/04/29 Servers