摘要: 当我们试图绑定一些事件到DOM元素上的时候,我相信上面这4个方法是最常用的。而它们之间到底有什么不同呢?在什么场合下用什么方法是最有效的呢?准备知识:当我们在开始的时候,有些知识是必须具备的:DOM树下图仅仅是一个示例,这是一个在browser环境下的一棵模拟DOM树,在下面的代码中仅起到演示的作用:Event bubbling (aka event propagation)冒泡我们的页面可以理解为一棵DOM树,当我们在叶子结点上做什么事情的时候(如click一个a元素),如果我们不人为的设置stopPropagation(Moder Browser), cancelBubble(IE),那么 阅读全文
posted @ 2012-10-09 17:42 moonreplace 阅读(14157) 评论(4) 推荐(4) 编辑
摘要: 如果你有一个对象,它包含一组有序的聚簇数据(其实就是一个或者一组利用某种结构聚集起来的数据),你如果想要一种统一的并且是简单的访问接口来访问这一组数据,那么iterator就可以发挥它的用武之地了。调用这个对象的code不需要了解你对象的数据结构,它们唯一需要知道的是如何来得到其中的每一个元素。在Iterator模式中,你的object需要提供一个next()方法,当调用next()的时候,它必须返回你这个对象中的下一个element, 当然这取决于你的数据结构,来确定下一个element到底是哪一个元素,有可能是物理不挨着,或者是出于某种目的,你给他们人为的排序。当然我们还得需要提供另一个函 阅读全文
posted @ 2012-10-08 16:33 moonreplace 阅读(338) 评论(0) 推荐(0) 编辑
摘要: factory模式的目的是用来创建objects.它经常以类或者是一个类的静态方法的形式出现,但是不论以何种形式的出现, 最终都得实现下面的目标:当我们在设置一组对象的时候,它们需要执行一组相同的代码的时候。在编译的时候,在不需要知道确切的类型(class)的时候,可以创建相应的对象在传统面向对象语言中,第2点尤为重要,当我们需要创建类的实例时,我们往往不能提前知道确切的实例类型,而在JS中我们可以很轻松的来实现。以factory method或者是facotry class来创建对象的时候,都是通过继承相同的parent object, 然后利用不同的subclasses来创建不同的对象。来 阅读全文
posted @ 2012-10-08 15:46 moonreplace 阅读(276) 评论(0) 推荐(0) 编辑
摘要: singleton是指对于一个特定的类,只会产生一个实例。这就是说,当你第二次用这个class去创建一个新对象时,你会得到第一次创建的那个对象。在JS中,要如何实现呢?在JS中没有类,当我们创建一个新的对象时,这个对象实际上就是singleton.当我们用直接量来创建一个对象时,这实际上就是一个新的singleton实例:var obj= { myprop: 'my value'}Using newJS中没有类,所以照字面意思来套用singleto是没有什么意义的。但是在JS中可以用new通过constructor来创建对象,而当你用new来创建一系列对象的时候,如果想得到返回 阅读全文
posted @ 2012-09-29 17:16 moonreplace 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 提到代码重用,我们往往会想到inherits,当然还有其它的方式 ,我们还可以通过compoite来达到代码重用的目的。不过,当我们在试图实现代码重用的时候,请记住“Prefer object composition to class inheritance"Classical Versus Modern Inheritance Patterns在JS中什么是Classical继承呢,这个命名方式不是通用的。所表达的意思其实就是别的语言中的类继承。因为在JS中不存在类这个概念,我们可以随时改变它的属性和方法,而不必像其他语言那样麻烦。在JS中,有constructor,还有可以用ne 阅读全文
posted @ 2012-09-25 21:36 moonreplace 阅读(380) 评论(0) 推荐(0) 编辑
摘要: 在JS中创建一个对象是非常简单的,可以利用直接量 var object={},也可以用constructor var object = new Object().而且它本身没有特殊的语法,像什么命名空间,modules, packages, private properties和static members.在下面的内容中将会集中展示,命名空间模式,依赖声明,module模式和sandbox模式,它们可以帮助你更好的组织你的代码。Namespace Patternnamespace可以帮助我们的程序尽力减少对全局变量的污染,这样我们就可以把命名冲突减小到最低。当然javascript并没有提供 阅读全文
posted @ 2012-09-20 21:22 moonreplace 阅读(288) 评论(0) 推荐(0) 编辑
摘要: Functions是JavaScript中一非常重要的一部分,主要体现在两方面:一是first-class objects,二是它会提供运行的scope.named function expression:var add = function add(a,b){ return a+b;}anonymous function:var add = function (a,b) { return a + b;};这两者完成的功能是一样的,但有什么区别呢:区别就在于,当我们试图去取function.name的时候,named function expression将会得到add,而anonymou.. 阅读全文
posted @ 2012-09-17 22:51 moonreplace 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 最近在读jQuery 1.8.1的code,在读到support函数的时候,它在对IEclone node的时候会一同clone绑定的events的时候,用到了fireEvent函数。如下代码if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { div.attachEvent( "onclick", clickFn = function() { // Cloning a node shouldn't copy over any // bound event 阅读全文
posted @ 2012-09-16 20:15 moonreplace 阅读(2816) 评论(0) 推荐(0) 编辑
摘要: literal其实类似于我们可以对array, function, object...这些由基本类型(string, number,boolean,null, undefined)所组成的复合类型,像简单类型那样来赋值,而不需要动用new来操作。Object Literal:实际上javascript中的object类似于hash table中的键值对,它的值可以是基本类型,当然也可以是别的object,我们称之为属性。如果值是function,我们就称他们为method.来看下面的定义object的方法:View Code 利用Constructor创建Objectjs中虽然没有类,但是依然 阅读全文
posted @ 2012-09-13 17:47 moonreplace 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 去掉数组中的重复元素,在JS中即可以利用常规方法来一一比较,然后把其中的不重复元素加入到结果数组中,也可以利用JS中的对象特性来完成特定数组类型的去重。因为在JS中它是非强类型的语言,所以在我们的数组中会出现object, function, number, string, null, undefined, bool.如果是这种情况,下列列出的代码有可能不能完成。常规方法:遍历最初的数组,拿出一个元素,和结果数组中的每一个进行比较,如果没有重复,即将新元素插入结果数组。View Code var originalArray=["test","0", 1, 阅读全文
posted @ 2012-09-10 22:22 moonreplace 阅读(1359) 评论(0) 推荐(0) 编辑