JavaScript DOM高级程序设计1.3-常见陷阱--我要坚持到底!
区分大小写
- 单引号双引号
大多数开发人员选择用单引号,因为XTHML要求所有XHTML的属性都必须使用双引号
var html='<h2 class="a">A list!</h2>'
+'<ol>'
+'<li class="a">Foo</li>'
+'<li class="a">Bar</li>'
+'</ol>'
总是比
var html="<h2 class=\"a\">A list!</h2>"
+"<ol>"
+"<li class=\"a\">Foo</li>"
+"<li class=\"a\">Bar</li>"
+"</ol>"
但是对于行内(inline)单引号仍然必须转义:
var html = '<p class="a">Don\'t forget to escape single quotes!</p>';
- 换行
最佳方案就是使用连接操作符(+)并将每行用引号括起来:
var html='<h2 class="a">A list!</h2>'
+'<ol>'
+'<li class="a">Foo</li>'
+'<li class="a">Bar</li>'
+'</ol>'
- 可选的分号和花括号
- 重载(并非真正的重载)
相同名字的函数永远只能存在一个实例。如果编写如下的函数
function alert(message)
{
ADS.$('messageBox').appendChild(document.createTextNode(message));
}
浏览器将不会执行往常的提示信息
- 匿名函数
看一下我们常规的注册函数
function clicked()
{
alert('Linked to :'+this.href);
}
var anchor= ADS.$('someID');
ADS.addEvent(anchor,'click',clicked)
匿名函数:
var anchor=ADS.$('someId');
addEvent(anchor,'click',function(){
alert('Linked to:' + this.href);
});
- 作用域解析和闭包
作用域:(通过var维护作用域链)
function myFunction()
{
var myVar='inside';
}
//定义变量
var myVar='outside';
myFunction();
alert(myVar);//outside
如果去掉:
function myFunction()
{
myVar='inside';
}
//定义变量
var myVar='outside';
myFunction();
alert(myVar);//inside
下面看一个例子:
ADS.addEvent(window, 'load', function(W3CEvent) {
for (var i=1 ; i<=3 ; i++ ) { var anchor = document.getElementById('anchor' + i); ADS.addEvent(anchor,'click',function() {
alert('My id is anchor' + i);
});
}
});
<li><a href="http://advanceddomscripting.com" id="anchor1">Anchor 1</a></li>
<li><a href="http://advanceddomscripting.com" id="anchor2">Anchor 2</a></li>
<li><a href="http://advanceddomscripting.com" id="anchor3">Anchor 3</a></li>
</ul>
目的:点击anchorx 便提示My id is anchorx,但是情况却不是这样。
原因:i的值时间上是在单机时间发生时,才从 作用域链中取得的,当单机时间发生时,initAnchors()已经执行完毕,因此i的值为4,所以每个alert()显示的都是同一个结果。原因:
处理办法:
function
registerListener(anchor,i) { ADS.addEvent(anchor, 'click', function() { alert('My id is anchor' + i); }); } function initAnchors() { for ( i=1 ; i<=5 ; i++ ) { var anchor = document.getElementById('anchor'+i); registerListener(anchor,i); } } ADS.addEvent(window, 'load', initAnchors);
- 迭代对象
通过hasOwnProperty()方法检查不涉及其他对象继承的属性和方法。智慧检查在特定对象自身中直接创建的属性
- 函数的调用和引用(不带括号)
JavaScript DOM高级程序设计1.3-常见陷阱--我要坚持到底!的更多相关文章
- JavaScript DOM高级程序设计 4.2 事件类型--我要坚持到底!
对象事件 load和unload(载入页面的时候调用load,关闭页面的时候调用unload) abort和error 对于载入图像时出现错误的情况,可以使用error事件侦听器来进行说明: ADS. ...
- JavaScript DOM高级程序设计 7.向应用程序加入Ajax--我要坚持到底!
有时候,或许是因为理解能力,也或许是因为浮躁,看东西总是不入心,而且还老是想跳过本节,或者赶紧看完本节,这样的恶性循环,让我在即没有真正的学习到知识,又打击我的学习信心,还浪费了我很多事件,我想,当遇 ...
- JavaScript DOM高级程序设计 4.3控制事件流和注册事件侦听器--我要坚持到底!
一.事件流 我们通过下面一个实例,进行说明. <body> <h1>Event Flow</h1> <ul id="nav"> &l ...
- JavaScript DOM高级程序设计 3.6 实例 将HTML代码转换成DOM代码(附源码)--我要坚持到底!
作为一名Web开发者,最讨厌的事情就是重复性任务,摆脱乏味的日常重复性事物的一种方法,是借助可重用的对象或者说与你现在建立的ADS库类似的库,另外一种让事情变得有意思,且能够加速开发进程的方式是编写能 ...
- JavaScript DOM高级程序设计 3.-DOM2和HTML2--我要坚持到底!
由一个HTML进行说明,我就不敲了,直接copy <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " ...
- JavaScript DOM 高级程序设计读书笔记二
响应用户操作和事件 事件就是操作检测与脚本执行的组合,或者基于检测到的操作类型在某个对象上调用事件侦听器(事件处理程序). 事件的类型 事件可以分为几种类型:对象事件,鼠标事件,键盘事件(只适用于do ...
- JavaScript DOM 高级程序设计读书笔记一
创建可重用的对象 简而言之,对象就是包含一组变量(称为属性)和函数(称为方法)的集合的实例.对象通常由类派生而来,而类中定义了对象拥有的属性和方法.如果你的脚本中都是对象之间的交互操作,那么就可以称之 ...
- JavaScript DOM高级程序设计 5动态修改样式和层叠样式表2--我要坚持到底!
把样式置于DOM脚本之外 style属性 我们可以这样设置前景色之类的属性: element.style.color='red'; 也可以使用下面的代码设置背景颜色: element.style.ba ...
- JavaScript DOM高级程序设计 5动态修改样式和层叠样式表1(源代码)--我要坚持到底!
W3C DOM2样式规范 现在这边贴出本章要的源代码,注意要结合前面用到的ADS库http://vdisk.weibo.com/s/Dq8NU CSSStyleSheet对象属性: type :始终是 ...
随机推荐
- 《APUE》第6章笔记
这一章主要介绍了口令文件和组文件的结构和一些围绕这些结构的函数. 口令文件即passwd就是在/etc/passwd中可以查阅.其结构是: 上图四个平台能支持的就用黑点表示. 因为加密口令这一项放在p ...
- ASP.NET Web API标准的“管道式”设计
详见:http://www.cnblogs.com/artech/p/asp-net-web-api-pipeline.html http://www.codeproject.com/Articles ...
- linux设备驱动模型(kobject与kset)
Linux设备模型的目的:为内核建立一个统一的设备模型,从而又一个对系统结构的一般性抽象描述.换句话说,Linux设备模型提取了设备操作的共同属性,进行抽象,并将这部分共同的属性在内核中实现,而为需要 ...
- Linux恢复删除文件
一.介绍extundelete 1.extundelete的文件恢复工具,该工具最给力的一点就是支持ext3/ext4双格式分区恢复. 2. 在实际线上恢复过程中,切勿将extundelete安装到你 ...
- 【面试题】Https
https原理, 我很难一下子记住, https=http+ssl 先说http, 基于tcp/IP协议 传输,有三次握手 http://blog.csdn*net/xubo_zhang/art ...
- 子查询优化成join关联查询时要注意一对多关系
mysql> select * from t where t.id in (select t1.tid from t1); +------+ | id | +------+ | +------+ ...
- [译] ASP.NET 生命周期 – ASP.NET 上下文对象(七)
使用 HttpRequest 对象 HttpRequest 对象描述的是一个正在被处理的 HTTP 请求.下表列举了 HttpRequest 中的属性,它们提供了当前请求的相关信息(HttpReque ...
- win7下以兼容模式安装oracle10g
在win7系统装Oracle时经常会遇到一个“Oracle 10g 出现程序异常终止,发生内部错误!请将以下文件提供给 Oracle技术部门“未知”“未知”“未知””这样一个错误,百度了下,才知道原来 ...
- mybatis generator自动生成 实体类, sqlmap配置文件 详细介绍
我使用的是Eclipse Luna 装了自己常用的插件, generator也是其中一个推荐下载 MyBatis_Generator_1.3.1.zip离线安装包 <?xml version=& ...
- CocoaPods - 在 Mac 中的生与死
1. 集成 Cocoapod: 1.1 安装 ruby环境 mac 系统默认有 Ruby 环境, 通过 $ ruby -v 可以查看当前的 Ruby 版本. 如果 Ruby 版本过低可以通过 rvm ...