Fork me on GitHub
  2012年11月17日
摘要: Promises是一种异步编程模型,通过一组API来规范化异步操作,这样也能够让异步操作的流程控制更加容易。这里谈的是Promises/A,算是Promises的一个分支吧,其实就是根据Promises模型定义了一组API。由于Promises对于新手而言理解曲线还是比较陡峭的,这里循序渐进的给大家介绍,同时实现一个最简单的Promises/A代码。Promises/A有个别名叫做“thenable”,就是“可以then”的。这里一个promise有三种状态:[默认、完成、失败],初始创建的时候是默认状态,状态只可以从默认变成完成,或者默认变成失败。一旦完成或者失败,状态就不能再变。为了简化文 阅读全文
posted @ 2012-11-17 10:01 【艾伦】 阅读(2222) 评论(0) 推荐(3) 编辑
摘要: JavaScript中有大量异步操作,首先可以看看JS中什么东西会产生异步(这里先只考虑浏览器里的情况):Ajax(XMLHttpRequest)Image Tag,Script Tag,iframe(原理类似)setTimeout/setIntervalCSS3 Transition/AnimationpostMessageWeb WorkersWeb Socketsand more…实际上在我自己的理解中,任何“在未来不确定的时间发生”的事情都可以理解为异步,因此各种DOM事件也可以用类似的方式去理解和处理。异步是JS中的重要话题,Ajax和Node.JS出现以后更是让JS中的异步编程提升 阅读全文
posted @ 2012-11-17 09:55 【艾伦】 阅读(1250) 评论(0) 推荐(5) 编辑
  2012年10月18日
摘要: <<style type="text/css"> .box{ width: 200px; height: 200px; background: red; /*非IE的主流浏览器识别的垂直居中的方法*/ display : table-cell; vertical-align: middle; text-align: center; /* 针对IE的Hack */ ... 阅读全文
posted @ 2012-10-18 09:08 【艾伦】 阅读(267) 评论(0) 推荐(2) 编辑
  2012年10月13日
摘要: 浏览器是我们最常用的软件之一,文本又是网页中最主要的元素,在浏览器显示文本的过程中有许多有趣的细节,值得展开来讲讲,或许能减少一些误解。这是一个比较粗略的,概括性的介绍,尽可能不涉及过多的技术细节和具体实现,而立足于给 Web 开发者和设计师提供一些正确的概念。下面的介绍主要根据我对 WebKit 和 Gecko (Firefox) 的印象来谈,其他的浏览器也大致相同,如有阙漏之处欢迎指出。解码当浏览器收到来自 Web 服务器的网页数据之后,第一步是要把它解码成可以阅读的文本,因为历史原因,不同区域和语言的网页可能会使用不同的编码方式,而浏览器判断编码主要是依据以下方法:Web 服务器返回的 阅读全文
posted @ 2012-10-13 10:57 【艾伦】 阅读(399) 评论(1) 推荐(1) 编辑
  2012年8月29日
摘要: 面向对象编程(OOP),是目前主流的编程方式,似乎能够OOP的语言,才会被大多数人视为好语言,不能OOP的语言都是“奥特曼”。而JavaScript,则是常常被人误解成“奥特曼”的一种语言,殊不知,JavaScript有着一种更高级的OOP特性。在传统的OOP语言中,Object是Class的一个实例,一个Class可以继承自另一个Class,我们可以理解为“基于类型(Class)”;而JavaScript的语法中并没有Class的概念,Object传承自哪里并不重要,重要的是它能做什么,我们可以理解为“基于原型(Prototype)”。下面就去看看JavaScript的OOP特性吧。1、一切 阅读全文
posted @ 2012-08-29 10:24 【艾伦】 阅读(401) 评论(0) 推荐(3) 编辑
  2012年8月26日
摘要: 0.9.2版 原创,转载请标明 3Q....1 var AppView = Backbone.View.extend({2 3 4 5 })6 7 console.log(AppView)AppView是 Backbone.View 的一个视图模型子类,即AppView是父类返回的一个新的构造函数源代码如下: var extend = function(protoProps, staticProps) { var parent = this; var child; if (protoProps && protoProps.hasOwnProperty('construc 阅读全文
posted @ 2012-08-26 07:29 【艾伦】 阅读(2114) 评论(1) 推荐(3) 编辑
  2012年8月24日
摘要: var Model = { inherited:function () { }, created:function () { }, prototype:{ init:function () { } }, //给类添加属性 extend:function (obj) { var extended = obj.extended; for (var i in obj) { this[i] = obj[i]; } if (extended) exte... 阅读全文
posted @ 2012-08-24 16:32 【艾伦】 阅读(367) 评论(0) 推荐(1) 编辑
摘要: if (typeof Object.create !== "function") { Object.create = function (o) { function F() { } F.prototype = o; return new F(); }}var Model = { inherited:function () { }, created:function () { }, prototype:{ init:function () { } }, cre... 阅读全文
posted @ 2012-08-24 15:48 【艾伦】 阅读(355) 评论(0) 推荐(1) 编辑
摘要: ORM是什么?对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 这也同时暗示者额外的执行开销;然而,如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。 更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG规范的对象数据库依然需要类级别的元数据。对象-关系映射(O 阅读全文
posted @ 2012-08-24 15:12 【艾伦】 阅读(503) 评论(0) 推荐(1) 编辑
摘要: /** * 事件对象 * bubbles 表示事件是否通过DOM已冒泡形式触发 * * button 如果有鼠标按下的按钮 * * altKey Alt键 * * shiftKey shift * * meate Meate * * isChar 当前按下的键是否标示一个字符 * * charCode unicode值 (仅对keypress) * * keyCode 非unicode * * which * * pageX,pageY 事件发生时相对于页面(viewprot) 的坐标 * * screenX screeY * * currentTarget ... 阅读全文
posted @ 2012-08-24 14:50 【艾伦】 阅读(339) 评论(0) 推荐(1) 编辑
摘要: /** * 1 .函数调用返回时undefinde ,执行上下文是window * 2. new 构造,执行上下文从全局对象变成一个空的上下文,这个上下文代表新生的实列 * 因此this关键字指向当前的实例 * * 3. 默认情况下,构造函数没有返回,默认返回this,否则返回任意非原始的类型值 * * **///兼容bind方法if (!Function.prototype.bind) { Function.prototype.bind = function (obj) { var slice = [].slice, args = sl... 阅读全文
posted @ 2012-08-24 14:23 【艾伦】 阅读(390) 评论(0) 推荐(1) 编辑
摘要: var Class = function (parent) { var klass = function () { this.init.apply(this, arguments); } if (parent) { /** * 所有的子类都共享了同一个原型 * 避免在继承类的时候创建实例,只有实例的属性才会被继承 * 而非类的属性,设置对象的__proto__ * **/ var ctor = function () { }; ctor.... 阅读全文
posted @ 2012-08-24 14:20 【艾伦】 阅读(437) 评论(0) 推荐(1) 编辑
摘要: var Person = function (name ){ this.name = name;}//必须这种var p = new Person('aaron')//这个有问题Person('aaron')/** * 1 .函数调用返回时undefinde ,执行上下文是window * 2. new 构造,执行上下文从全局对象变成一个空的上下文,这个上下文代表新生的实列 * 因此this关键字指向当前的实例 * * 3. 默认情况下,构造函数没有返回,默认返回this,否则返回任意非原始的类型值 * * **/var Class = function(){ 阅读全文
posted @ 2012-08-24 14:19 【艾伦】 阅读(439) 评论(0) 推荐(0) 编辑
  2012年8月18日
摘要: Backbone中Events的中只有3个方法,分别是on, off, trigger,十分清晰,也没有其他依赖,下面我们来分析一下。 Events 是一个可以被mix到任意对象的模块,它拥有让对象绑定和触发自定义事件的能力。 事件在被绑定之前是不需要事先声明的,还可以携带参数。我们通过一个例子来看:var object = {};_.extend(object, Backbone.Events);object.bind("alert", function(msg) { alert("Triggered " + msg);});关键是_.extend , 阅读全文
posted @ 2012-08-18 13:21 【艾伦】 阅读(4898) 评论(2) 推荐(3) 编辑
摘要: 参考资料http://documentcloud.github.com/backbone/http://www.csser.com/tools/backbone/backbone.js.html官网介绍Backbone通过提供模型Models、集合Collection、视图Veiew赋予了Web应用程序分层结构。通过以下方式实现分层结构: 模型Model绑定键值数据和自定义事件; 集合Colection是模型的有序或无序集合,带有丰富的可枚举API; 视图View声明事件监听函数; 将模型、集合、视图与服务端的RESTful JSON接口连接。自调用匿名函数整个Backbone的源码用 阅读全文
posted @ 2012-08-18 13:14 【艾伦】 阅读(3608) 评论(2) 推荐(5) 编辑