代码改变世界

随笔分类 -  [06]JS/jQuery

大叔手记(19):你真懂JavaScript吗?

2012-02-09 09:45 by 汤姆大叔, 20279 阅读, 收藏, 编辑
摘要: 介绍大叔整理的《深入理解JavaScript系列》已经快20篇了,不知道大家看的如何了? 除了大家熟知的闭包、原型、作用域以外,不知道大家是否真正理解了JavaScript的核心特性,在网上发现几个小题目非常有意思,正好适合考察大家对JavaScript的理解。如果大家有兴趣(或者自认为对JavaScript了解还不错的人),可以尝试着回答一下下面5个题目的输出结果(不要google或baidu哦)。至于正确结果嘛,自己可以将代码复制到浏览器里就可以看到了(稍后这两天,我会将详细的解释单独发帖整理出来)。PS:大胆点,不管结果对不对,都把你的答案贴出来(最好带有自己的想法,后面我们和准确解释做 阅读全文

深入理解JavaScript系列(19):求值策略(Evaluation strategy)

2012-02-08 09:50 by 汤姆大叔, 18604 阅读, 收藏, 编辑
摘要: 介绍本章,我们将讲解在ECMAScript向函数function传递参数的策略。计算机科学里对这种策略一般称为“evaluation strategy”(大叔注:有的人说翻译成求值策略,有的人翻译成赋值策略,通看下面的内容,我觉得称为赋值策略更为恰当,anyway,标题还是写成大家容易理解的求值策略吧),例如在编程语言为求值或者计算表达式设置规则。向函数传递参数的策略是一个特殊的case。http://dmitrysoshnikov.com/ecmascript/chapter-8-evaluation-strategy/写这篇文章的原因是因为论坛上有人要求准确解释一些传参的策略,我们这里给出 阅读全文

深入理解JavaScript系列(18):面向对象编程之ECMAScript实现(推荐)

2012-02-06 09:27 by 汤姆大叔, 23263 阅读, 收藏, 编辑
摘要: 介绍本章是关于ECMAScript面向对象实现的第2篇,第1篇我们讨论的是概论和CEMAScript的比较,如果你还没有读第1篇,在进行本章之前,我强烈建议你先读一下第1篇,因为本篇实在太长了(35页)。英文原文:http://dmitrysoshnikov.com/ecmascript/chapter-7-2-oop-ecmascript-implementation/注:由于篇幅太长了,难免出现错误,时刻保持修正中。在概论里,我们延伸到了ECMAScript,现在,当我们知道它OOP实现时,我们再来准确定义一下:ECMAScript is an object-oriented progra 阅读全文

深入理解JavaScript系列(17):面向对象编程之概论

2012-02-03 09:05 by 汤姆大叔, 28119 阅读, 收藏, 编辑
摘要: 介绍在本篇文章,我们考虑在ECMAScript中的面向对象编程的各个方面(虽然以前在许多文章中已经讨论过这个话题)。我们将更多地从理论方面看这些问题。 特别是,我们会考虑对象的创建算法,对象(包括基本关系 - 继承)之间的关系是如何,也可以在讨论中使用(我希望将消除之前对于JavaScript中OOP的一些概念歧义)。英文原文:http://dmitrysoshnikov.com/ecmascript/chapter-7-1-oop-general-theory/概论、范式与思想在进行ECMAScript中的OOP技术分析之前,我们有必要掌握一些OOP基本的特征,并澄清概论中的主要概念。ECM 阅读全文

深入理解JavaScript系列(16):闭包(Closures)

2012-01-31 08:44 by 汤姆大叔, 53671 阅读, 收藏, 编辑
摘要: 介绍本章我们将介绍在JavaScript里大家经常来讨论的话题 —— 闭包(closure)。闭包其实大家都已经谈烂了。尽管如此,这里还是要试着从理论角度来讨论下闭包,看看ECMAScript中的闭包内部究竟是如何工作的。正如在前面的文章中提到的,这些文章都是系列文章,相互之间都是有关联的。因此,为了更好的理解本文要介绍的内容,建议先去阅读第14章作用域链和第12章变量对象。英文原文:http://dmitrysoshnikov.com/ecmascript/chapter-6-closures/概论在直接讨论ECMAScript闭包之前,还是有必要来看一下函数式编程中一些基本定义。众所周知, 阅读全文

深入理解JavaScript系列(15):函数(Functions)

2012-01-30 08:37 by 汤姆大叔, 36083 阅读, 收藏, 编辑
摘要: 介绍本章节我们要着重介绍的是一个非常常见的ECMAScript对象——函数(function),我们将详细讲解一下各种类型的函数是如何影响上下文的变量对象以及每个函数的作用域链都包含什么,以及回答诸如像下面这样的问题:下面声明的函数有什么区别么?(如果有,区别是什么)。原文:http://dmitrysoshnikov.com/ecmascript/chapter-5-functions/var foo = function () { ...};平时的惯用方式:function foo() { ...}或者,下面的函数为什么要用括号括住?(function () { ...})();关于... 阅读全文

深入理解JavaScript系列(13):This? Yes,this!

2012-01-17 08:50 by 汤姆大叔, 46354 阅读, 收藏, 编辑
摘要: 介绍在这篇文章里,我们将讨论跟执行上下文直接相关的更多细节。讨论的主题就是this关键字。实践证明,这个主题很难,在不同执行上下文中this的确定经常会发生问题。许多程序员习惯的认为,在程序语言中,this关键字与面向对象程序开发紧密相关,其完全指向由构造器新创建的对象。在ECMAScript规范中也是这样实现的,但正如我们将看到那样,在ECMAScript中,this并不限于只用来指向新创建的对象。英文翻译: Dmitry A. Soshnikov在Stoyan Stefanov的帮助下发布: 2010-03-07http://dmitrysoshnikov.com/ecmascript/c 阅读全文

深入理解JavaScript系列(12):变量对象(Variable Object)

2012-01-16 09:03 by 汤姆大叔, 54572 阅读, 收藏, 编辑
摘要: 介绍JavaScript编程的时候总避免不了声明函数和变量,以成功构建我们的系统,但是解释器是如何并且在什么地方去查找这些函数和变量呢?我们引用这些对象的时候究竟发生了什么?原始发布:Dmitry A. Soshnikov发布时间:2009-06-27俄文地址:http://dmitrysoshnikov.com/ecmascript/ru-chapter-2-variable-object/英文翻译:Dmitry A. Soshnikov发布时间:2010-03-15英文地址:http://dmitrysoshnikov.com/ecmascript/chapter-2-variable-o 阅读全文

深入理解JavaScript系列(11):执行上下文(Execution Contexts)

2012-01-13 09:00 by 汤姆大叔, 43088 阅读, 收藏, 编辑
摘要: 简介从本章开始,我将陆续(翻译、转载、整理)http://dmitrysoshnikov.com/网站关于ECMAScript标标准理解的好文。本章我们要讲解的是ECMAScript标准里的执行上下文和相关可执行代码的各种类型。原始作者:Dmitry A. Soshnikov原始发布: 2009-06-26俄文原文:http://dmitrysoshnikov.com/ecmascript/ru-chapter-1-execution-contexts/英文翻译:Dmitry A. Soshnikov.发布时间:2010-03-11英文翻译:http://dmitrysoshnikov.com 阅读全文

深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)

2012-01-12 09:01 by 汤姆大叔, 90650 阅读, 收藏, 编辑
摘要: 本篇是ECMA-262-3 in detail系列的一个概述(本人后续会翻译整理这些文章到本系列(第11-19章)。每个章节都有一个更详细的内容链接,你可以继续读一下每个章节对应的详细内容链接进行更深入的了解。适合的读者:有经验的开发员,专业前端人员。原作者: Dmitry A. Soshnikov发布时间: 2010-09-02原文:http://dmitrysoshnikov.com/ecmascript/javascript-the-core/参考1:http://ued.ctrip.com/blog/?p=2795参考2:http://www.cnblogs.com/ifishing/ 阅读全文

深入理解JavaScript系列(9):根本没有“JSON对象”这回事!

2012-01-11 09:08 by 汤姆大叔, 44404 阅读, 收藏, 编辑
摘要: 前言写这篇文章的目的是经常看到开发人员说:把字符串转化为JSON对象,把JSON对象转化成字符串等类似的话题,所以把之前收藏的一篇老外的文章整理翻译了一下,供大家讨论,如有错误,请大家指出,多谢。正文本文的主题是基于ECMAScript262-3来写的,2011年的262-5新规范增加了JSON对象,和我们平时所说的JSON有关系,但是不是同一个东西,文章最后一节会讲到新增加的JSON对象。英文原文:http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/我想给大家澄清一下一个非常普遍的误解,我认为很多JavaScript 阅读全文

深入理解JavaScript系列(8):S.O.L.I.D五大原则之里氏替换原则LSP

2012-01-10 08:56 by 汤姆大叔, 20094 阅读, 收藏, 编辑
摘要: 前言本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第3篇,里氏替换原则LSP(TheLiskov Substitution Principle )。英文原文:http://freshbrewedcode.com/derekgreer/2011/12/31/solid-javascript-the-liskov-substitution-principle/开闭原则的描述是:Subtypes must be substitutable for their base types.派生类型必须可以替换它的基类型。 在面向对象编程里,继承提供了一个机制让子类和共享基类的代码 阅读全文

深入理解JavaScript系列(7):S.O.L.I.D五大原则之开闭原则OCP

2012-01-09 09:08 by 汤姆大叔, 24895 阅读, 收藏, 编辑
摘要: 前言本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第2篇,开闭原则OCP(The Open/Closed Principle )。开闭原则的描述是:Software entities (classes, modules, functions, etc.) should be open for extension but closed for modification.软件实体(类,模块,方法等等)应当对扩展开放,对修改关闭,即软件实体应当在不修改的前提下扩展。open for extension(对扩展开放)的意思是说当新需求出现的时候,可以通过扩展现有模型达到目的 阅读全文

深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP

2012-01-06 09:13 by 汤姆大叔, 42319 阅读, 收藏, 编辑
摘要: 前言Bob大叔提出并发扬了S.O.L.I.D五大原则,用来更好地进行面向对象编程,五大原则分别是:The Single Responsibility Principle(单一职责SRP)The Open/Closed Principle(开闭原则OCP)The Liskov Substitution Principle(里氏替换原则LSP)The Interface Segregation Principle(接口分离原则ISP)The Dependency Inversion Principle(依赖反转原则DIP)五大原则,我相信在博客园已经被讨论烂了,尤其是C#的实现,但是相对于Java 阅读全文

深入理解JavaScript系列(5):强大的原型和原型链

2012-01-05 09:12 by 汤姆大叔, 118313 阅读, 收藏, 编辑
摘要: 前言JavaScript 不包含传统的类继承模型,而是使用 prototypal 原型模型。虽然这经常被当作是 JavaScript 的缺点被提及,其实基于原型的继承模型比传统的类继承还要强大。实现传统的类继承模型是很简单,但是实现 JavaScript 中的原型继承则要困难的多。由于 JavaScript 是唯一一个被广泛使用的基于原型继承的语言,所以理解两种继承模式的差异是需要一定时间的,今天我们就来了解一下原型和原型链。原型10年前,我刚学习JavaScript的时候,一般都是用如下方式来写代码: var decimalDigits = 2, tax ... 阅读全文

大叔手记(17):大叔2011年读过的书及2012年即将要读的书

2012-01-04 09:39 by 汤姆大叔, 27175 阅读, 收藏, 编辑
摘要: 前言2011年是大叔最累的一年(基本上都是晚上12点以后睡觉,早上6点30分起),读得书也是异常的多,一方面要保持自己的技术在最前列,另外方面技术管理和项目管理方面的东西也要进一步进阶,2011年读过的书超过60本(也包括只收藏不读的书,还有一些非常小的英文电子书就不列了),除了一些大牛的书,其它的书基本上都是粗读的(一周一本),同时2012年的书也是按照这个计划来安排的,即:国际/国内大牛的书通读,一般的书粗读,以保证技术人员和管理人员的先进性:)。带 [荐]字的都是推荐大家读的。看了这篇帖子,大家千万别像我这么变态地读书,因为大叔已经不怎么亲自Coding了,所有以大量的时间读书。大叔在这 阅读全文

深入理解JavaScript系列(4):立即调用的函数表达式

2011-12-31 09:45 by 汤姆大叔, 117105 阅读, 收藏, 编辑
摘要: 前言大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行。在详细了解这个之前,我们来谈了解一下“自执行”这个叫法,本文对这个功能的叫法也不一定完全对,主要是看个人如何理解,因为有的人说立即调用,有的人说自动执行,所以你完全可以按照你自己的理解来取一个名字,不过我听很多人都叫它为“自执行”,但作者后面说了很多,来说服大家称呼为“立即调用的函数表达式”。本文英文原文地址:http://benalman.com/news/2010/11/immediately-invoked-function-expression/什么是自执行?在JavaScript里, 阅读全文

深入理解JavaScript系列(3):全面解析Module模式

2011-12-30 09:52 by 汤姆大叔, 100067 阅读, 收藏, 编辑
摘要: 简介Module模式是JavaScript编程中一个非常通用的模式,一般情况下,大家都知道基本用法,本文尝试着给大家更多该模式的高级使用方式。首先我们来看看Module模式的基本特征:模块化,可重用封装了变量和function,和全局的namaspace不接触,松耦合只暴露可用public的方法,其它私有方法全部隐藏关于Module模式,最早是由YUI的成员Eric Miraglia在4年前提出了这个概念,我们将从一个简单的例子来解释一下基本的用法(如果你已经非常熟悉了,请忽略这一节)。基本用法先看一下最简单的一个实现,代码如下:var Calculator = function (eq) { 阅读全文

深入理解JavaScript系列(2):揭秘命名函数表达式

2011-12-29 09:02 by 汤姆大叔, 114214 阅读, 收藏, 编辑
摘要: 前言网上还没用发现有人对命名函数表达式进去重复深入的讨论,正因为如此,网上出现了各种各样的误解,本文将从原理和实践两个方面来探讨JavaScript关于命名函数表达式的优缺点。简单的说,命名函数表达式只有一个用户,那就是在Debug或者Profiler分析的时候来描述函数的名称,也可以使用函数名实现递归,但很快你就会发现其实是不切实际的。当然,如果你不关注调试,那就没什么可担心的了,否则,如果你想了解兼容性方面的东西的话,你还是应该继续往下看看。我们先开始看看,什么叫函数表达式,然后再说一下现代调试器如何处理这些表达式,如果你已经对这方面很熟悉的话,请直接跳过此小节。函数表达式和函数声明在EC 阅读全文

深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点

2011-12-28 23:00 by 汤姆大叔, 223140 阅读, 收藏, 编辑
摘要: 才华横溢的Stoyan Stefanov,在他写的由O’Reilly初版的新书《JavaScript Patterns》(JavaScript模式)中,我想要是为我们的读者贡献其摘要,那会是件很美妙的事情。具体一点就是编写高质量JavaScript的一些要素,例如避免全局变量,使用单变量声明,在循环中预缓存length(长度),遵循代码阅读,以及更多。此摘要也包括一些与代码不太相关的习惯,但对整体代码的创建息息相关,包括撰写API文档、执行同行评审以及运行JSLint。这些习惯和最佳做法可以帮助你写出更好的,更易于理解和维护的代码,这些代码在几个月或是几年之后再回过头看看也是会觉得很自豪的。书 阅读全文