Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选

首页 / 脚本样式 / JavaScript / JavaScript面向对象的支持(上)

JavaScript面向对象的支持(上)2010-02-21 博客园 账号难注册很少有人对JavaScript的面向对象特性进行系统的分析。我希望接下来的文字让你了解到这个语言最少为人知的一面。

1. JavaScript中的类型

--------

虽然JavaScript是一个基于对象的语言,但对象(Object)在JavaScript中不是第一型的。JS是以函数(Function)为第一型的语言。这样说,不但是因为JS中的函数具有高级语言中的函数的各种特性,而且也因为在JS中,Object也是由函数来实现的。——关于这一点,可以在后文中“构造与析构”部分看到更进一步的说明。JS中是弱类型的,他的内置类型简单而且清晰:

undefined: 未定义

number : 数字

boolean : 布尔值

string : 字符串

function : 函数

object : 对象1). undefined类型

在IE5及以下版本中,除了直接赋值和typeof()之外,其它任何对undefined的操作都将导致异常。如果需要知道一个变量是否是undefined,只能采用typeof()的方法:

<script>
var v;
if (typeof(v) == "undefined") {
// ...
}
</script>

但是在IE5.5及以上版本中,undefined是一个已实现的系统保留字。因此可以用undefined来比较和运算。检测一个值是否是undefined的更简单方法可以是:

<script>
var v;
if (v === undefined) {
// ...
}
</script>

因此为了使得核心代码能(部分地)兼容IE5及早期版本,Romo核心单元中有一行代码用来“声明”一个undefined值:

//---------------------------------------------------------
// code from Qomolangma, in JSEnhance.js
//---------------------------------------------------------
var undefined = void null;

这一行代码还有一点是需要说明的,就是void语句的应用。void表明“执行其后的语句,且忽略返回值”。因此在void之后可以出现能被执行的任何“单个”语句。而执行的结果就undefined。当然,如果你愿意,你也可以用下面的代码之一“定义undefined”。

// 1. 较复杂的方法,利用一个匿名的空函数执行的返回

var undefined = function(){}();

// 2. 代码更简洁,但不易懂的方法

var undefined = void 0;void也能像函数一样使用,因此void(0)也是合法的。有些时候,一些复杂的语句可能不能使用void的关键字形式,而必须要使用void的函数形式。例如:

// 必须使用void()形式的复杂表达式

void(i=1);

// 或如下语句:

void(i=1, i++);