介绍本章是关于 ECMAScript 面向对象实现的第 2 篇,第 1 篇我们讨论的是概论和 CEMAScript 的比较,如果你还没有读第1篇,在进行本章之前,我强烈建议你先读一下第1篇,因为本篇实在太长了(35页)。注:由于篇幅太长了,难免出现错误,时刻保持修正中。
介绍在本篇文章,我们考虑在 ECMAScript 中的面向对象编程的各个方面(虽然以前在许多文章中已经讨论过这个话题)。我们将更多地从理论方面看这些问题。 特别是,我们会考虑对象的创建算法,对象(包括基本关系 - 继承)之间的关系是如何,也可以在讨论中使用(我希望将消除之前对于 JavaScript 中 OOP 的一些概念歧义)。
介绍本章我们将介绍在 JavaScript 里大家经常来讨论的话题 —— 闭包(closure)。闭包其实大家都已经谈烂了。尽管如此,这里还是要试着从理论角度来讨论下闭包,看看 ECMAScript 中的闭包内部究竟是如何工作的。正如在前面的文章中提到的,这些文章都是系列文章,相互之间都是有关联的。
介绍本章节我们要着重介绍的是一个非常常见的 ECMAScript 对象——函数(function),我们将详细讲解一下各种类型的函数是如何影响上下文的变量对象以及每个函数的作用域链都包含什么,以及回答诸如像下面这样的问题:下面声明的函数有什么区别么?(如果有,区别是什么)。var foo = function () { ...};平时的惯用方式:function foo() { ...
前言在第 12 章关于变量对象的描述中,我们已经知道一个执行上下文的数据(变量、函数声明和函数的形参)作为属性存储在变量对象中。同时我们也知道变量对象在每次进入上下文时创建,并填入初始值,值的更新出现在代码执行阶段。这一章专门讨论与执行上下文直接相关的更多细节,这次我们将提及一个议题——作用域链。
在前半部分章节中,涉及到一些重要的概念,在当时章节上下文中,限于内容,没有展开讨论,这些内容可能较难理解,因此都集中在这个章节进行讨论。具体涉及到的内容有原型链,执行期上下文,活动对象,作用域链以及 this 值。这部分内容可以结合之前章节中相关部分一起参考。
介绍在这篇文章里,我们将讨论跟执行上下文直接相关的更多细节。讨论的主题就是 this 关键字。实践证明,这个主题很难,在不同执行上下文中 this 的确定经常会发生问题。许多程序员习惯的认为,在程序语言中,this 关键字与面向对象程序开发紧密相关,其完全指向由构造器新创建的对象。
介绍JavaScript 编程的时候总避免不了声明函数和变量,以成功构建我们的系统,但是解释器是如何并且在什么地方去查找这些函数和变量呢?我们引用这些对象的时候究竟发生了什么?大多数 ECMAScript 程序员应该都知道变量与执行上下文有密切关系:var a = 10; // 全局上下文中的变量(function () { var b = 20; // function上下文中的局部变量})();alert(a);
简介从本章开始,我将陆续(翻译、转载、整理)http://dmitrysoshnikov.com/网站关于 ECMAScript 标标准理解的好文。定义每次当控制器转到 ECMAScript 可执行代码的时候,即会进入到一个执行上下文。执行上下文(简称-EC)是 ECMA-262 标准里的一个抽象概念,用于同可执行代码(executable code)概念进行区分。
前言JavaScript 不包含传统的类继承模型,而是使用 prototypal 原型模型。虽然这经常被当作是 JavaScript 的缺点被提及,其实基于原型的继承模型比传统的类继承还要强大。实现传统的类继承模型是很简单,但是实现 JavaScript 中的原型继承则要困难的多。
前言大家学 JavaScript 的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行。
简介Module 模式是 JavaScript 编程中一个非常通用的模式,一般情况下,大家都知道基本用法,本文尝试着给大家更多该模式的高级使用方式。
前言网上还没用发现有人对命名函数表达式进去重复深入的讨论,正因为如此,网上出现了各种各样的误解,本文将从原理和实践两个方面来探讨 JavaScript 关于命名函数表达式的优缺点。简单的说,命名函数表达式只有一个用户,那就是在 Debug 或者 Profiler 分析的时候来描述函数的名称,也可以使用函数名实现递归,但很快你就会发现其实是不切实际的。
Java 线程之间的通信对程序员完全透明,内存可见性问题很容易困扰 Java 程序员。Java 程序运行在 JVM(Java Virtual Machine,Java 虚拟机)上,可以把 JVM 理解成 Java 程序和操作系统之间的桥梁,JVM 实现了 Java 的平台无关性,由此可见 JVM 的重要性。所以在学习 Java 内存分配原理的时候一定要牢记这一切都是在 JVM 中进行的,JVM 是内存分配原理的基础与前提。
如果你想成为一个 Java 开发的高手,那就不止能够开发代码,改改 bug,做些页面的增删改查,你还需要了解 Java 背后的故事。JVM 是 Java Virtual Machine(Java 虚拟机)的缩写。Java 语言的一个非常重要的特点就是与平台的无关性。而使用 Java 虚拟机是实现这一特点的关键。想知道为什么 Java 能够在长期霸占 TIOBE 编程语言社区排行榜榜首的吗?
在这本教程的一开始 (第 6 章, 构建脚本基础) 你已经学习了如何创建简单的任务. 然后你也学习了如何给这些任务加入额外的行为, 以及如何在任务之间建立依赖关系.这些仅仅是用来构建简单的任务.Gradle 可以创建更为强大复杂的任务. 这些任务可以有它们自己的属性和方法.这一点正是和 Ant targets 不一样的地方.
概述Java 不仅仅是一门编程语言,它还是一个由一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统、移动终端、企业服务器和大型机等各种场合。时至今日,Java 技术体系已经吸引了近千万软件开发者,这是全球最大的软件开发团队。
主内存与工作内存Java 内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量主要是指共享变量,存在竞争问题的变量。
happen—before 规则介绍Java 语言中有一个“先行发生”(happen—before)的规则,它是 Java 内存模型中定义的两项操作之间的偏序关系,如果操作 A 先行发生于操作 B,其意思就是说,在发生操作 B 之前,操作A产生的影响都能被操作 B 观察到,“影响”包括修改了内存中共享变量的值、发送了消息、调用了方法等,它与时间上的先后发生基本没有太大关系。
对象引用Java 中的垃圾回收一般是在 Java 堆中进行,因为堆中几乎存放了 Java 中所有的对象实例。谈到 Java 堆中的垃圾回收,自然要谈到引用。在 JDK1.2 之前,Java 中的引用定义很很纯粹:如果 reference 类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。但在 JDK1.
关注时代Java