`
javasee
  • 浏览: 965371 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

无废话JavaScript(上)

阅读更多

无废话JavaScript(上)

《程序员》2008.09期有一篇名为《无废话ErLang》的文章,这让我想到了许多的诸如“无废话C”、“无
废话书评”这类的文章,也想到了JavaScript可没有一篇“无废话”,所以决定开个篇来写这个。与这个
决定相关的,还因为另一个缘故:许多读者认为我那本《JavaScript语言精髓与编程实践》读来辛苦,所
以我一直想写个简单的读本。索性,这次就写个最简单的吧。

声明一下:如果只想看复杂的东西,不要读这篇文章了。


一、JavaScript最初其实是过程式的

追溯到1.0时代的JavaScript,其实是过程式的。它的基本特性有只有两项,一项是能够直接放在网页的HTML
标签中去接管事件,例如:


第二项则是支持一种简单的对象构造器(函数)。其实这个时代的构造器不如说是初始化函数更合适,它应当
这样写:

所以,早期的JavaScript无可置疑地背上了“基于对象的过程式脚本语言”的名头,这一点也不冤枉。除了
上面两项特性,JavaScript有着一些一般性的脚本语言的性质,例如:
 -整个.js文件一次性装载到执行环境(例如WEB浏览器)中,在经历一次语法分析之后,开始逐行执行;
 -在上述语法分析周期,(具名的)函数和用"var"声明的变量被预先处理在一个标识符表中,以便脚本代码使用;
 -从全局的代码行或函数调用开始执行,整个过程中执行不到的代码不被查错(除第一步中的语法检错外)。
也具有通常的过程式语言的性质,例如:
 -有if/for/while/switch等语句;
 -用function来声明函数,使用"(..)"来声明它的形式参数表,以及表示函数调用和传参;
 -类似于C语言的基本语法,包括使用"{..}"来表示代码块,以及使用"!="等运算符号;
 -一个类似于Java语言的对象操作运算符"."号,和属性、方法这样的基本概念。

好了,现在你看到了一个基本的JavaScript语言,它的代码只有象C一样的函数与语句行,支持非常简单的面
向对象编程。OK,这其实也差不多是JavaScript的全部……嗯……全部的语法基础观念。如果你用过一门哪怕
稍稍入门一点的程序语言,你都会觉得JavaScript其实挺简单的。

是啊,“写个函数,然后调用它”,就这么简单。例如:


二、稍微复杂一点的是数据类型

JavaScript有六种基本数据类型,分为两类。一类是值类型,即undefined,string, number和boolean;一类
是引用类型,即function和object。检测数据X是何种类型,可以简单地使用"typeof X"来返回一个字符串。

值类型与引用类型在其它高级语言中,是用“访问过程中是传值还是传引用”来区别的。简单说,在下面函数
中:

X传入的是值本身,还是一个指向该值的引用(你可以想象成指针),表明了X是何种类型。与其它语言不同的
是,JavaScript并不在调用入口上加指示字来说明传值的方法,例如:


而是简单的由脚本引擎根据实际传入的X的数据类型来决定如何传值。例如:


能这样处理的关键,在于JavaScript类型系统足够简洁。六种基本类型包括了三个哲学化的观念:能执行的
与不能执行的;对象或非对象;有(值)或无(值)。显然,理解这种哲学性的思想并不容易,因为更复杂一层
的、自包含的逻辑是:函数也是对象、值也是对象、无值也是值。

这就是JavaScript类型系统的全部了。如果你想简单的用用,那么你记住下面的就够了:
 -string、number、boolean三种简单值类型是用来传给网页显示的;
 -object用来存放其它的object、funtion或上述简单值类型,并用'.'运算通过一个属性名找到它们;
 -undefined是用来检测数据有效无效的;
 -function是用来执行的。
当然,如果你要成为思想家或者语言学的疯子,那么去思考上面的哲学化命题吧,我不拦着你。


三、能用鼻子想通的就是直接量了

或许很多人都搞不明白JavaScript中的直接量声明,然而它确实是非常简单的。既然我们大多数高级语言都
支持常量声明,甚至最原始的汇编语言也支持立即值——例如:

那么JavaScript当然……必然……可以面无愧色地支持直接量了——他们其实是一个概念。例如:

只不过在理解的时候,一定要切记:所有上述的代码中,所谓直接量或立即值,是指那个'256',而不是那
个变量或常量的标识符ABYTE/aByte。更进一步的,你要知道JavaScript支持了8种直接量声明:
--------------------
数值:支持整数,浮点和0x等进制前缀,以及……等等;
布尔值:true/false;
无值:undefined;
函数:function() { ... },也称为匿名函数;
字符串:使用'..'或"..",支持多行和转义符;
正则表达式:使用/../..,支持g,i,m等正则配置;
数组:使用[..],支持嵌套数组;
对象:使用{...},支持嵌套对象声明;
--------------------
你可以把上述字符量作为一个个体,用在代码——我的意思是表达式或语句行——的任意位置。用鼻子就可以
进行的推论是:


如上的,你可以把所有的直接量放在表达式或语句中间。偶尔的,因为语法解析的必要,你可能需要用一对
括号把这个直接量括起来——否则语法上会出现歧义,例如下面这个:

好了,直接量原本就这么简单,你只需要期望自己还有一个没退化的鼻子就好了。


四、原型继承

原型继承可能是这个世界上最简单不过的东西了。

我们假定一个对象是一张表——伟大的Anders就支持我这个假设,他说JavaScript的对象是“属性包”——
这样的一个表中存放的就是“name=value”这样的“名字/值”对。当我们想用下面的代码:

去找值(value)时,就在表里查一下(用delphi的人应该记得TStringList吧)。对象,哦,所谓对象——在
我曾经的理解里——就是“带有继承关系的结构体(struct/record)”。那么,继承关系是?

是这样,如果上面的查找不成功,对于原型继承来说,只需要在aObj这个对象的“原型”中找一下,就成了。
这个原型也是一个对象,记录在构造器函数的prototype属性中。例如:


当在aObj中找不到name这个属性时,按照上面的规则,就会去xxx这个对象中找,也就是试图找找"xxx.name"。
由于xxx本身也是一个对象,也会有一个构造器函数(例如xxxObject()),因此当xxx.name也找不到时,就会
去xxxObject.prototype里面去找……如此……如此深层次的挖掘,直到再也找不到……就返回undefined。

多简单啊,所谓原型继承,只不过是一个简单的检索规则。

反过来说,你需要让aObj能访问到某个成员,也只需要修改一下它(或它们——一指类似aObj的实例)的原型
就好了。这在JavaScript中是非常常用的。例如你想让所有的string都有某个属性:

又例如你想让所有的对象都有某个属性(或方法,或其它什么东东),那么:

多么美好,现在String也能getMyName了,函数也能getMyName了,所有没有名字的也有名字了——当然,名
字是undefined。

没名字也是名字,我没想过你会不会变成哲学疯子,对不起。

下篇在这里

http://blog.csdn.net/aimingoo/archive/2008/10/06/3022409.aspx


分享到:
评论

相关推荐

    无废话JavaScript和html学习笔记

    JavaScript和HTML是Web开发的基石,它们共同构建了互联网上动态交互的页面。HTML,全称为超文本标记语言,是一种用于创建网页结构的标准标记语言。自1995年HTML2.0发布以来,它经历了多次更新,其中HTML4.01是1999年...

    无废话JavaScript教程(全集)第1/4页

    《程序员》2008.09期有一篇名为《无废话ErLang》的文章,这让我想到了许多的诸如“无废话C”、“无废话书评”这类的文章,也想到了JavaScript可没有一篇“无废话”,所以决定开个篇来写这个。与这个决定相关的,还...

    无废话XML.pdf

    《无废话XML》这本书显然旨在提供一个清晰、简洁的XML学习路径,针对XML初学者设计。以下是XML的一些核心知识点: 1. **XML的基本结构**:XML文档由元素构成,每个元素都有开始标签和结束标签,如`<element>`和`...

    无废话ExtJs 系列教程十八[继承:Extend]

    在"无废话ExtJS系列教程十八[继承:Extend]"中,我们主要关注的是ExtJS中的类继承机制,这是一个核心特性,它允许开发者创建可复用和可扩展的组件结构。在JavaScript中,继承是通过原型链实现的,而在ExtJS中,它被...

    【JavaScript源代码】无废话快速上手React路由开发.docx

    ```javascript import { BrowserRouter as Router } from 'react-router-dom'; ``` 2. **HashRouter**: 使用URL的hash部分来维护当前的路由状态,适用于无法修改服务器配置的情况。 - 示例: ```javascript ...

    无废话XML

    无废话XML <author>John Doe <year>2023 ``` 在这个例子中,`<book>`是父元素,`<title>`、`<author>`和`<year>`是子元素。 XML命名规则: - 元素和属性名称必须以字母或下划线开头。 - 只能包含字母、数字、...

    JavaScript-Editor

    第一: 1st Javascript Editor 确实可以称得上是第一的javascript的脚本编辑器, 因为它体积小而智能提示功能的确是强大,这一点似乎不用多说,网上一搜就知道了, 第二: 据我所知,目前网上还没有真正的破解版.某些人...

    JQuery无废话系列教程.doc

    **jQuery无废话系列教程概述** jQuery是一个流行的JavaScript库,它为开发者提供了更加简便的方式来操作DOM(文档对象模型),处理事件,以及实现动画效果。本文旨在帮助初学者快速掌握jQuery的基本用法,通过实例...

    《无废话XML》《无废话XML》

    《无废话XML》这本书,正如其名,可能是以简洁明了的方式深入浅出地介绍了XML的核心概念和技术。 XML的基本结构包括元素、属性、文本内容、注释、处理指令等。元素是XML文档的构建块,它们通过尖括号 `和 `>` 包裹...

    无废话XML教程

    这个“无废话XML教程”很可能是为了帮助初学者或开发者以简洁、直接的方式理解XML的核心概念和应用。 XML的主要特点包括: 1. **可扩展性**:XML的名称空间机制允许用户自定义标签,以满足各种特定领域的需求,如`...

    xms2005——无废话xml

    在“xms2005——无废话xml”这个主题中,我们将深入探讨XML的基本概念、语法以及它与其他技术如CSS(Cascading Style Sheets)和DOM(Document Object Model)的交互。 XML的语法简洁且严格,它允许用户自定义标记...

    无废话XML教程.zip

    本“无废话XML教程”很可能是为了帮助读者理解XML的基本概念、语法和应用,从而更好地在相关工作中运用XML。通过阅读“XML0.pdf”这份文档,你可以深入学习XML的基础知识,包括元素、属性、命名空间、验证和解析等...

    无废话XML---劳虎

    作为“无废话XML”书籍的主题,我们可以深入探讨XML的基本概念、语法特性、应用领域以及与之相关的技术。 XML的设计目标是传输和存储数据,而非显示数据,这与HTML(超文本标记语言)的主要用途不同。它通过自定义...

    无废话xml(xnl学习资源)

    本资源包提供了“无废话”的XML学习资料,旨在帮助初学者快速掌握XML的基础知识和应用技巧。 1. **XML的基本概念**:XML是一种自定义标记语言,允许用户根据需求定义自己的标签。它以纯文本形式存在,具有良好的...

    无废话ExtJs 系统教程十四[列表:GridPanel]

    在"无废话ExtJS 系统教程十四[列表:GridPanel]"中,我们将会深入探讨如何有效地使用GridPanel来创建高效的、功能丰富的数据列表。 GridPanel是ExtJS中的核心组件之一,它允许用户以表格形式展示大量数据,并支持...

    无废话ExtJs 系列教程十五[树:TreePanel]

    《无废话ExtJs系列教程十五:树:TreePanel》 ExtJs是一个强大的JavaScript库,用于构建富客户端Web应用。在本教程中,我们将深入探讨一个重要的组件——TreePanel,它是ExtJs用来展示层次结构数据的工具,常用于...

Global site tag (gtag.js) - Google Analytics