八、JavaScript面向对象的支持 4. 实例和实例引用 在.NET Framework对CTS(Common Type System)约定“一切都是对象”,并分为“值类型”和“引用类型”两种。其中“值类型”的对象在转换成“引用类型”数据的过程中,需要进行一个“装箱”和“拆箱” ...
这些天在为Qomo项目写“JavaScript面向对象的支持”这组文章。也一直在期待网上购得的那本《JavaScript 权威指南》(第四版)快快到来。 在前公司,有这本书的第二或第三版,也一直将这本书视为经典。但那时并没有深入的去看它前几章的概念性叙述,而是把它当成一本手册来查。现在却刻意地关注了,因为Qomo的底层是以纯理论的OOP为基础的。 今天这本书终于寄到了,但是一读之下,大失所望。不知道作者对JavaScript语言的理解能力不够,还是他对OOP的理解不够。《JavaScript权威指南》这本书对面向对象的叙述不但不专业,而且还错误百出。实在不值一看。 试举几例: JavaScript没有正式的类的概念, ...
三年前修补的那半颗牙终于掉了。在折磨我近两个月后掉了,但牙痛并没有因牙掉而减轻,反而因空缺出一个位置来而前所未有的别扭。用舌尖顶着那个洞,心里发狠随他去,死都不看牙医。 牙医在我的生病词典里属恶魔级人物。三年前补牙的场景历历在目,女牙医在慈眉善目地劝服我躺在那个要命的座椅上后,用托盘托着一堆不锈钢的行刑工具狞笑地看着我。之前妈妈曾告诫我说伸头一刀缩头也一刀,躲也躲不过。心想不如勇敢点不要让别人看笑话,谁让我欠扁地老爱临睡前偷吃东西呢,牙坏掉受罪也是自找的。牙医可对我毫不留情,并没有因为我的假装合作而放轻动作,我想大概她已看惯了这些恐惧紧张丑陋扭曲的脸了吧,见怪不怪,一视同仁,没理由对我特殊照顾。 你有没有试过双目紧闭嘴被撑到极限大?那么放个灯泡在嘴里试试吧。当然我只是姑且一说你也姑且一听,不要真的放, ...
八、JavaScript面向对象的支持 3. 构造、析构与原型问题 4). 需要用户维护的另一个属性:constructor 回顾前面的内容,我们提到过: (如果正常地实现继承模型,)对象实例的constructor属性指向构造器 obj.constructor.prototype指向该对象的原型 通过Object.constructor属性,可以检测obj2与obj1是否是相同类型的实例 与原型链要通过用户代码来维护prototype属性一样,实例的构造器属性constructor也需要用户代码维护。 对于JavaScript的内置对象来说,constructor属性指向内置的构造器函数。如: // // 内置对象实例的constructor属性 // var _object_ ...
最近总感觉肚子好饿,想吃东西的冲动忍都忍不住,哪怕是刚刚吃过饭。想必真的是要长胖了,不能看到电视里有吃东西的场景,甚至“常备三精双黄连,流感季节别感冒”都会引得我想买来喝。看见什么想吃什么,加上意志薄弱经不起美食诱惑,常常是馋得要命以至于胃里发出声响,造成肚子好饿的幻觉。 其实最胖时腰围也不过一尺九,只是倒霉遇到个喜欢小巧玲珑型的老公,以我现在的身材来看,离他要求的骨感是有些距离。于是痛下决心以后尽量不吃零食,在一次超市购物中对老公说:以后请监督我,要再吃乱七八糟的东西你可以揍我。 周末,老公公司聚餐,他们部门总是鼓励员工带家属一起参加。我这是第二次跟着蹭饭了。席间我发现这两次都只有我一个家属, ...
八、JavaScript面向对象的支持 3. 构造、析构与原型问题 我们已经知道一个对象是需要通过构造器函数来产生的。我们先记住几点: 构造器是一个普通的函数 原型是一个对象实例 构造器有原型属性,对象实例没有 (如果正常地实现继承模型,)对象实例的constructor属性指向构造器 从三、四条推出:obj.constructor.prototype指向该对象的原型 好,我们接下来分析一个例子,来说明JavaScript的“继承原型”声明,以及构造过程。 // // 理解原型、构造、 ...
八、JavaScript面向对象的支持 2. JavaScript面向对象的支持 5). 使用instanceof关键字的运算 在JavaScript中提供了instanceof关键字来检测实例的类型。这在前面讨论它的“五重身份”时已经讲过。但instanceof的问题是,它总是列举整个原型链以检测类型(关于原型继承的原理在“构造与析构”小节讲述),如: // // instanceof使用中的问题 // function MyObject() { // ... } function MyObject2() { // ... } MyObject2.prototype = new MyObject(); obj1 ...
梦见自己变成加勒比海海底众多骷髅中的一具。惨淡的月光穿透海面照射到成群的骨架上,我们挂着褴褛的布条,周身泛着萤白的光,端着枪,表情肃穆,顽强地走向岸边。 大概我太想减肥了,以至于梦里把自己减到只剩骨架。现实中又拼命吃零食,加上每天都不运动,眼看着进藏一月所瘦下来的身材又反弹回来。该S的脂肪阴魂不散,在不知不觉中再度回来拜访我。我跟你很熟吗?我很喜欢你吗?为什么不找别人去偏要长在我身上? 窗外,阴霾的天空落着冰凉的雨,敲打在窗棂上。思绪象根细线,扯着记忆的风筝飞回了青葱岁月里,信马由缰。老公做为男朋友时很喜欢看我穿低腰仔裤露脐上装,长发高高束起,开宝蓝色尼桑阳光停在他公司楼下, ...
八、JavaScript面向对象的支持 2. JavaScript面向对象的支持 2). 反射机制在JavaScript中的实现 JavaScript中通过for..in语法来实现了反射机制。但是JavaScript中并不明确区分“属性”与“方法”,以及“事件”。因此,对属性的类型考查在JS中是个问题。下面的代码简单示例for..in的使用与属性识别: // // JavaScript中for..in的使用和属性识别 // var _r_event = _r_event = /^[Oo] ...
现在ajax实现太过火了,什么都向上面靠。其实早在2000前以前,WEB开发人员就已经在用Frame/Frameset来实现远程数据的获取。后来IE成为事实上的B端标准之后,IFrame就成了做远程数据获取的“标准手段”了。——例如M$就用这种方法来做MSDN网站左侧的那个“巨大的树”。 在ajax出现之前,这一系列的技术被称为“RPC(Remote Procedure Call)”,象XMLRPC、HTTPRPC以及PHPRPC这些开源项目都是有的。PRC的一个问题,是必须实现一个S端,与WEB端的代码约定一个描述过程名(ProcedureName)和参数表的细节的接口。这其中, ...
今天在网上查阅资料时,发现一个事实(当时,也怪我在为这个项目起名时过于无知):在藏民族中,珠峰的名字是Qomolangma,意思是女神或地神之母。而Everest是用一个不知所谓的英国人的名字命名的。 关于这一点的详细资料,可以查阅: http://www.51yala.com/Html/2004730221325-1.html 因此决心为这个项目更名。好在是在初起阶段,最多是我麻烦点,多改点blog。希望大家能谅解。至于Qomolangma这个单词的读音,就是“珠穆朗玛”。——Qomolangma是E文中对藏文“ ...
书接上回: 《从基础开始:Qomo OpenProject中的一些关键词》(1)(2) 八、JavaScript面向对象的支持 很少有人对JavaScript的面向对象特性进行系统的分析。我希望接下来的文字让你了解到这个语言最少为人知的一面。 1. JavaScript中的类型 虽然JavaScript是一个基于对象的语言,但对象(Object)在JavaScript中不是第一型的。JS是以函数(Function)为第一型的语言。这样说,不但是因为JS中的函数具有高级语言中的函数的各种特性,而且也因为在JS中,Object也是由函数来实现的。——关于这一点,可以在后文中“构造与析构” ...
低下头,忏悔一下下先~~ …… …… …… 总是喜欢骂麦秸笨的,有时候又说她肥。不管是骂她笨还是骂她肥,总是一句“猪啊”~因此便成了习惯。 不过这样的习惯放在家里也没有什么,就象她呼喝我的时候总是叫臭狗狗一样。私房的事情,不真骂,也不当真。 但是今天居然在跟Soul说话的时候,来了一句:你猪头啊!我当场就昏掉了。 才发现,当骂老婆成为习惯的时候,还会以同样的习惯去骂同事、骂上司、骂长辈、骂……如此发展下去,如何得了? 尽管是以无恶意的心态在说出这句话, ...
目前项目仍在初起阶段。许多事情是我一个人来做的,因此时间上实在不够用。 我目前的主要工作是撰写项目的相关文档和整理项目中的可公开代码。我需要从原有的WEUI项目中剥离出一些非商业的代码出来。——尽管这个工作不复杂,但涉及到原公司的授权问题。 由于是开源项目,因此我保证大家是可以得到完整代码、文档的。不过当前,我希望大家能关注已公开的文档部分,并尽可能积极的参与(这两天的e-mail没回,是因为我元旦期间在外地,不能上网)。 在“Qomo OpenProject中的一些关键词(1)(2)”这两部分公开之后,接下来计划撰写的文档是: 八、JavaScript面向对象的支持 九、 ...
七、Qomo OpenProject中的一些关键词(2) 接下来我们讲述一些在Rich Web Client中,而不仅是JavaScript中涉及到的一些关键词。我希望这对你理解Qomo OpenProject的设计,乃至整个B端开发的现状有帮助。 1. Rich Web Client 和 Rich Internet Application(RIA) 首先,RIA是Macromedia基于Flash在浏览器上的广泛应用而提出的一个“实现丰富的浏览器端应用”的框架。按照Macromedia的解释,RIA是符合Rich ...