随笔分类 - Javascript
摘要:http://bonsaiden.github.com/JavaScript-Garden/zh/#object.forinloop简介(Intro)JavaScript秘密花园是一个不断更新的文档,主要关心JavaScript一些古怪用法。 对于如何避免常见的错误,难以发现的问题,以及性能问题和不好的实践给出建议, 初学者可以籍此深入了解JavaScript的语言特性。JavaScript秘密花园不是用来教你JavaScript。为了更好的理解这篇文章的内容, 你需要事先学习JavaScript的基础知识。在Mozilla开发者网络中有一系列非常棒的JavaScript学习向导。关于作者(T
阅读全文
摘要:在本章中,我们将分析Prototypejs中关于JavaScript继承的实现。 Prototypejs是最早的JavaScript类库,可以说是JavaScript类库的鼻祖。 我在几年前接触的第一个JavaScript类库就是这位,因此Prototypejs有着广泛的群众基础。 不过当年Prototypejs中的关于继承的实现相当的简单,源代码就寥寥几行,我们来看下。 早期Prototypejs中继承的实现 源码: var Class = { // Class.create仅仅返回另外一个函数,此函数执行时将调用原型方法initialize ...
阅读全文
摘要:在本章中,我们将分析Douglas Crockford关于JavaScript继承的一个实现 - Classical Inheritance in JavaScript。 Crockford是JavaScript开发社区最知名的权威,是JSON、JSLint、JSMin和ADSafe之父,是《JavaScript: The Good Parts》的作者。 现在是Yahoo的资深JavaScript架构师,参与YUI的设计开发。 这里有一篇文章详细介绍了Crockford的生平和著作。 当然Crockford也是我等小辈崇拜的对象。调用方式首先让我们看下使用Crockford式继承的调用方式:
阅读全文
摘要:在本章中,我们将分析John Resig关于JavaScript继承的一个实现 - Simple JavaScript Inheritance。 John Resig作为jQuery的创始人而声名在外。是《Pro JavaScript Techniques》的作者,而且Resig将会在今年秋天推出一本书《JavaScript Secrets》,非常期待。调用方式调用方式非常优雅: 注意:代码中的Class、extend、_super都是自定义的对象,我们会在后面的代码分析中详解。 var Person = Class.extend({ // init是构造函...
阅读全文
摘要:在第一章中,我们使用构造函数和原型的方式在JavaScript的世界中实现了类和继承, 但是存在很多问题。这一章我们将会逐一分析这些问题,并给出解决方案。 注:本章中的jClass的实现参考了Simple JavaScript Inheritance的做法。首先让我们来回顾一下第一章中介绍的例子: function Person(name) { this.name = name; } Person.prototype = { getName: function() { return this.name; } } function Employee(name, employeeID) { th.
阅读全文
摘要:这一章我们将会重点介绍JavaScript中几个重要的属性(this、constructor、prototype), 这些属性对于我们理解如何实现JavaScript中的类和继承起着至关重要的作用。thisthis表示当前对象,如果在全局作用范围内使用this,则指代当前页面对象window; 如果在函数中使用this,则this指代什么是根据运行时此函数在什么对象上被调用。 我们还可以使用apply和call两个全局方法来改变函数中this的具体指向。先看一个在全局作用范围内使用this的例子: <script type="text/javascript">
阅读全文
摘要:面向对象与基于对象几乎每个开发人员都有面向对象语言(比如C++、C#、Java)的开发经验。 在传统面向对象的语言中,有两个非常重要的概念 - 类和实例。 类定义了一类事物公共的行为和方法;而实例则是类的一个具体实现。 我们还知道,面向对象编程有三个重要的概念 - 封装、继承和多态。但是在JavaScript的世界中,所有的这一切特性似乎都不存在。 因为JavaScript本身不是面向对象的语言,而是基于对象的语言。 这里面就有一些有趣的特性,比如JavaScript中所有事物都是对象, 包括字符串、数组、日期、数字,甚至是函数,比如下面这个例子:?12345678910// 定义一个函数 -
阅读全文
摘要:DOCTYPE是document type(文档类型)的简写,在web设计中用来说明你用的XHTML或者HTML是什么版本。要建立符合标准的网页,DOCTYPE声明是必不可少的关键组成部分;除非你的XHTML确定了一个正确的DOCTYPE,否则你的标识和CSS都不会生效;当然对JS的取值也会有影响。 DOCTYPE声明如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
阅读全文
摘要:【2010.04.18 更新】更加严格地区分出了 IE 9,增强了 Opera 的区分能力,并将 Chrome 的判别特征换成了引擎特性 [via],这样你就能看出国内哪些浏览器是从 Chrome 的内核改过来的了,大家可以动手试试。 :)【2010.04.17 更新】IE 9 在我看来改进非常大:有我所关心的对 Mutation Events 的支持,还有事件模型的 W3C 化等等……本文中我就不多冗述,有机会再另文探讨。由于在项目中大量使用特征判断,IE 9 在这方面最显著的变化是:之前那则“最短的 IE 判断法”已经失效,一起被修复的还有一直伴随 IE 的数组 Bug:非空数组字面量的最
阅读全文
摘要:该错误只在IE中出现,出现该提示的原因主要有两种:1. 重定义了系统的触发事件名称作为自定义函数名如: onclick / onsubmit … 都是系统保留的事件名称,不允许作为重定义函数名称。2. 出现死循环,都提示:Stack overflow at line: 0 , 如:在图片对象定义了 onerror 事件的循环处理、<img src=”http://images.cnblogs.com/a.gif” onerror=”this.src=’/image/block.gif’” />这里并不是说 /images/a.gif 不存在, 可能是由于网络原因造成, 这时会执行
阅读全文
摘要:自定义鼠标样式,格式:css:{cursor:url('绝对路径的图片(格式:cur,ico)'),-moz-zoom-out;}//FF下面css:{cursor:url('绝对路径'),auto;}//IE,FF,chrome浏览器都可以前面url是自定义鼠标格式,图像的绝对路径地址,后面的参数是css标准的cursor样式,(IE下面可以不需要)图标的格式根据不同的浏览器来分:IE支持cur,ani,ico这三种格式,FF支持bmp,gif,jpg,cur,ico这几种格式,不支持ani格式,也不支持gif动画格式,因此来说一般将图片存为cur或ico格式
阅读全文
摘要:JavaScript语言是一门优秀的脚本语言.其中包含脚本语言的灵活性外还拥有许多高级语言的特性.例如充许构建和实例化一个对象,垃圾回收机制(GC:Garbage Collecation).通常我们使用new创建对象,GC负责回收对象占用内存区域.因此了解GC,可以加深对JavaScript垃圾回收机制的理解。
阅读全文
摘要:为了 脚本资源的高并行加载 提高页面加载速度.. 我们可能需要动态加载 script... 其中总是无法避免的 一个方法 是 使用 head.appendChild(script) ; 因为这种方式 可以直接跨域.但是有时候 动态加载脚本可能是要保证 他们的执行时序. 最理想的状态就是 所有的脚本 都可以 在 当前 http连接数 允许的前提下.最大化并行加载量的 同时 .. 可以选择 按时序执行或按加载完成顺序执行 即先到先执行.假设 我们有 3个 js 分别为 a.js b.js c.js 传统的方式 是这样的 :<script src="a.js"><
阅读全文
摘要:一、什么是闭包? “官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。 相信很少有人能直接看懂这句话,因为他描述的太学术。我想用如何在Javascript中创建一个闭包来告诉你什么是闭包,因为跳过闭包的创建过程直接理解闭包的定义是非常困难的。看下面这段代码: function a(){ var i=0; function b(){ alert(++i); } return b; } var c = a(); c(); 这段代码有两个特点: 1、函数b嵌套在函数a内部; 2、函数a返回函数b。 这样在执行完v.
阅读全文
摘要:Advanced JavascriptView more presentations from Adieu.
阅读全文
摘要:Closures in JavascriptView more presentations from hymanroth.
阅读全文
摘要:相信写js的,都知道window.onload吧,但是并不是每个人都知道DOMContentLoaded,其实即使你不知道,很有可能你也经常使用了这个东西。一般情况下,DOMContentLoaded事件要在window.onload之前执行,当DOM树构建完成的时候就会执行DOMContentLoaded事件,而window.onload是在页面载入完成的时候,才执行,这其中包括图片等元素。大多数时候我们只是想在DOM树构建完成后,绑定事件到元素,我们并不需要图片元素,加上有时候加载外域图片的速度非常缓慢。我们可以写代码来简单测试一下这两种事件:javascript代码(引入了jQuery1
阅读全文
摘要:构造方法[代码]工厂方法[代码]工厂方法和构造方法都有着一个相同的缺点,就是每创建一个实例,都会实例化该类的每个函数。 原型链[代码]原型链有个缺点就是它所有属性都共享,只要一个实例改变其他的都会跟着改变。如:[代码]混合方式以上三种都有着各自的缺点,所以我们要加以改进。[代码]动态原链要解决前三种的缺点,还有一种方法。[代码]
阅读全文
摘要:传统上,字符串连接一直是js中性能最低的操作之一。[代码]早期浏览器没有对这种运算进行优化。由于字符串是不可变的,这意味着要创建中间字符串来存储连接的结果。频繁地在后台创建和销毁字符串导制性能异常低下。发现这一点后,开发者们利用数组对象进行优化。[代码]在早期的浏览器中,没有创建和销毁中间字符串,在大量字符串连接情况下,这技术已被证明远快于使用加法方式。如今浏览器对字符串的优化已经改变了字符串相连的局面。Safari、Opera、Chrome、Firefox和IE8都在使用加法运算符上表现出了更好的性能。但是,IE8之前的版本没有优化,因此数组方法依然有效。这并不意味着字符串相连时我们要进行浏
阅读全文
摘要:JavaScript语言是一门优秀的脚本语言。其中包含脚本语言的灵活性外还拥有许多高级语言的特性。例如充许构建和实例化一个对象,垃圾回收机制(GC:Garbage Collecation)。通常我们使用new创建对象,GC负责回收对象占用内存区域。因此了解GC,可以加深对javascript垃圾回收机制的理解。GC在回收内存时,首先会判断该对象是否被其它对象引用。在确定没有其它对象引用便释放该对象内存区域。因此如何确定对象不再被引用是GC的关键所在。[代码]如上代码中,执行完cc()后a1被回收了,此后我们可以通过b1.rr弹出文字窗口。在一些基础书籍中解释为:a1为局部变量,b1是全局变量。
阅读全文