共计 15 篇文章

继承与混合,略谈系统的构建方式

这两天在读kissy的源代码,从一开始我就对它的mix()函数充满了敌意。因为无论从哪个角度来看,那都是一个极其低效的实现。不过深入了解这个框架之后,我对kissy中的新的系统构建的模型产生了兴趣,而这种系统构建的方式,也正是由mix()所带来的。 一、对象系统 我们先了解一下对象系统。在《JavaScript语言精髓与编程实践》中谈到过,面向对象系统有三种对象的继承方式,即原型、类和元类。这三种方式都可以构建大型对象系统。在后续讨论之前,我们在名词概念上做一些强调,所谓“对象系统”,是指由“一组对象构成的系统” ...

无废话JavaScript(上)

《程序员》2008.09期有一篇名为《无废话ErLang》的文章,这让我想到了许多的诸如“无废话C”、“无废话书评”这类的文章,也想到了JavaScript可没有一篇“无废话”,所以决定开个篇来写这个。 与这个决定相关的,还因为另一个缘故:许多读者认为我那本**《JavaScript语言精髓与编程实践》**读来辛苦,所以我一直想写个简单的读本。索性,这次就写个最简单的吧。 声明一下:如果只想看复杂的东西,不要读这篇文章了。 一、JavaScript最初其实是过程式的 追溯到1. ...

QoBean的元语言系统(一)

QoBean是从元语言系统开始构建整个语言系统的,从本文开始,我开始讲述QoBean所理解的元语言。不过,不同的人、从不同的侧面所理解的“元语言”是不一样的,不必求同。 “QoBean的元语言系统”包括三篇,分别是: 元语言系统基础,以及程序的基础元素 元语言下的编程基本方法 元语言的应用:虚拟执行环境 QoBean的项目地址: https://qomo.svn.sourceforge.net/svnroot/qomo/qobean ...

我的程序语言实践

动静之间,不变的本质 —— 我的程序语言实践 引子 源于SD2.0大会的召开,以及拙作《JavaScript语言精髓与编程实践》一书的出版在即,CSDN、博文视点以及《程序员》的编辑都希望我写一点关于语言的东西。我已经为这个问题苦恼了很久,因为我不知道可以说什么,既可以与先行者有别,又可以使后来者为鉴。 这下便借用《程序设计语言实践》一书的书名,讲讲我的经历吧。 从动态语言到静态语言 我所学的第一门语言其实是数据库编程语言DBASE,参加的是学校的一个暑期的关于微机操作的培训——程序设计语言只是其中很小的一部分,我们得从键盘键位之类的开始学起。 ...

Qomolangma实现篇(六):Qomo的OOP框架的实现技术

注:本文讲述的是FT4的一个修正版本中的OOP实现,而非原始发布版本。 一、Qomolangma中类继承的基本架构 Qomo在Object.js中,通过实现Class(),封装了“类继承”体系的绝大部分细节。如果你仅是要使用Qomo,那么你只需要通过“实现篇(五)”去了解一些基本语法就可以了。但是如果你想了解一些更细节的内容,或者你想让自己具有控制Qomo框架的能力,那么你应该继续将这篇技术文档读下去。 ——尽管,这并不如你想象地那样容易。 Qomo的加入,使JavaScript具有了完整的“类继承”体系。类继承的出现, ...

Qomolangma实现篇(五):Qomo的OOP的语法和类继承体系

一、Qomolangma中完整的OOP支持:Object.js Qomo自Field Test4开始提供Object.js,这个单元用于在Qomo中支持完整的OOP特性。通过Object.js,Qomo中的JavaScript由原来的“原型继承”转变成了“类继承”。而且,这个转变对于开发人员来说,几乎是完全透明的。 通过Object.js,Qomo支持了如下的面向对象特性: 特性(Attribute)及读写器(getter/setter) 类注册与类继承( ...

JavaScript面向对象的支持(7)

八、JavaScript面向对象的支持 6. JavaScript面向对象的支持的补充内容 1). 类型系统 我们前面已经完整地描述过JavaScript的两种类型系统。包括: 基础类型系统:由typeof()返回值的六种基础类型 对象类型系统:由new()返回值的、构造器和原型继承组织起来的类型系统 JavaScript是弱类型语言,因此类型自动转换是它语言特性的一个重要组成部分。但对于一个指定的变量而言,(在某一时刻,)它总是有确定的数据类型的。“运算”是导致类型转换的方法(但不是根源),因此“运算结果的类型”的确定就非常重要。 ...

JavaScript面向对象的支持(6)

八、JavaScript面向对象的支持 4. 实例和实例引用 在.NET Framework对CTS(Common Type System)约定“一切都是对象”,并分为“值类型”和“引用类型”两种。其中“值类型”的对象在转换成“引用类型”数据的过程中,需要进行一个“装箱”和“拆箱” ...

经典的《JavaScript 权威指南》中的“对象”不经典

这些天在为Qomo项目写“JavaScript面向对象的支持”这组文章。也一直在期待网上购得的那本《JavaScript 权威指南》(第四版)快快到来。 在前公司,有这本书的第二或第三版,也一直将这本书视为经典。但那时并没有深入的去看它前几章的概念性叙述,而是把它当成一本手册来查。现在却刻意地关注了,因为Qomo的底层是以纯理论的OOP为基础的。 今天这本书终于寄到了,但是一读之下,大失所望。不知道作者对JavaScript语言的理解能力不够,还是他对OOP的理解不够。《JavaScript权威指南》这本书对面向对象的叙述不但不专业,而且还错误百出。实在不值一看。 试举几例: JavaScript没有正式的类的概念, ...

JavaScript面向对象的支持(5)

八、JavaScript面向对象的支持 3. 构造、析构与原型问题 4). 需要用户维护的另一个属性:constructor 回顾前面的内容,我们提到过: (如果正常地实现继承模型,)对象实例的constructor属性指向构造器 obj.constructor.prototype指向该对象的原型 通过Object.constructor属性,可以检测obj2与obj1是否是相同类型的实例 与原型链要通过用户代码来维护prototype属性一样,实例的构造器属性constructor也需要用户代码维护。 对于JavaScript的内置对象来说,constructor属性指向内置的构造器函数。如: // // 内置对象实例的constructor属性 // var _object_ ...

JavaScript面向对象的支持(4)

八、JavaScript面向对象的支持 3. 构造、析构与原型问题 我们已经知道一个对象是需要通过构造器函数来产生的。我们先记住几点: 构造器是一个普通的函数 原型是一个对象实例 构造器有原型属性,对象实例没有 (如果正常地实现继承模型,)对象实例的constructor属性指向构造器 从三、四条推出:obj.constructor.prototype指向该对象的原型 好,我们接下来分析一个例子,来说明JavaScript的“继承原型”声明,以及构造过程。 // // 理解原型、构造、 ...

JavaScript面向对象的支持(3)

八、JavaScript面向对象的支持 2. JavaScript面向对象的支持 5). 使用instanceof关键字的运算 在JavaScript中提供了instanceof关键字来检测实例的类型。这在前面讨论它的“五重身份”时已经讲过。但instanceof的问题是,它总是列举整个原型链以检测类型(关于原型继承的原理在“构造与析构”小节讲述),如: // // instanceof使用中的问题 // function MyObject() { // ... } function MyObject2() { // ... } MyObject2.prototype = new MyObject(); obj1 ...

JavaScript面向对象的支持(2)

八、JavaScript面向对象的支持 2. JavaScript面向对象的支持 2). 反射机制在JavaScript中的实现 JavaScript中通过for..in语法来实现了反射机制。但是JavaScript中并不明确区分“属性”与“方法”,以及“事件”。因此,对属性的类型考查在JS中是个问题。下面的代码简单示例for..in的使用与属性识别: // // JavaScript中for..in的使用和属性识别 // var _r_event = _r_event = /^[Oo] ...

JavaScript面向对象的支持(1)

书接上回: 《从基础开始:Qomo OpenProject中的一些关键词》(1)(2) 八、JavaScript面向对象的支持 很少有人对JavaScript的面向对象特性进行系统的分析。我希望接下来的文字让你了解到这个语言最少为人知的一面。 1. JavaScript中的类型 虽然JavaScript是一个基于对象的语言,但对象(Object)在JavaScript中不是第一型的。JS是以函数(Function)为第一型的语言。这样说,不但是因为JS中的函数具有高级语言中的函数的各种特性,而且也因为在JS中,Object也是由函数来实现的。——关于这一点,可以在后文中“构造与析构” ...

从基础开始:Qomo OpenProject中的一些关键词

六、Qomo OpenProject中的一些关键词 1. JScript与JavaScript JavaScript是最早由网景公司在它的浏览器产品Netscape Navigator 2.0提出并实现的脚本语言。原名LiveScript。它最初出现的目的是给页面元素提供交互的能力,例如检查<FORM>表单中的输入值的有效性,并在必要时弹出一个提示对话框。 JavaScript只是借用了当时开始红火的Java语言的名字,却实在与Sun的Java语言没什么关系。 后来Microsoft在自己的Internet Explorer(IE)浏览器中发展自己的脚本引擎的时候,不得已地实现了当时已经成为事实标准的JavaScript脚本语言。事实上,如果不是Netscape的推动, ...