一、JavaScript 的基本特点
JavaScript 是解释性的,基于对象的脚本语言。它有下面几个显著特点, 这几个特点在后面的面向对象特性模拟中会反复用到, 因此这里先详细说明这几 个特点。
解释型语言:JavaScript 是一种解释性语言,解释性语言相对于编译 型语言,编译型语言必须先通过编译才能执行,而解释性语言不需要编 译,直接从上到下解释执行,一边解释一边执行,这就决定了解释性语 言的代码是有先后顺序的,需要执行的代码必须已经解释过。因此, JavaScript 需要注意代码的先后顺序。
二、面向对象的基本特点
面向对象有下列三个主要特点: 封装、继承和多态。这里先详细说明这几个 特点,后面几个部分分别在 JavaScript 中实现这些特点,从而实现完整的面 向对象模拟。
封装:封装就是把各种方法和变量合并到一个类,用这个类代表某个对 象为完成一定的任务所能保存的范围以及它能执行的操作。 封装隐藏了 方法执行的细节。
继承:继承就是根据现有类的方法和成员变量生成新的类的功能。 多态:多态就是对象随着程序执行而使其形式发生改变的能力。
三、JavaScript 语言基础
3.1 数据类型
基本数据类型:Number, String, Boolean, Function, Object, Array, null, undefined ,注意null 和undefined 的区别。
日期和时间:日期类型并不是 JavaScript 的基本数据类型,但 JavaScript 提供了一个处理日期的类: Date ,用法如下:
var now = new Date ();
var year = now . getYear ();// 年
var month = now . getMonth () + 1 ; // 月
var day = now . getDate ();// 日
var hour = now . getHours (); // 时
var minute = now . getMinutes ();// 分
var second = now . getSeconds (); // 秒
alert ( "现在时间是:" +year +"-" +month +"-" +day +" " +hour +":" +minute +":" +second );
正则表达式:主要用于对文本进行模式匹配, 实现对文本的查找和替换操作。 在 JavaScript 中,提供了一个 RegExp 类来处理正则表达式, 创建方式和 Date 一样,用关键字 new 就可以创建,如 var re = new RegExp();
和Date 不一样的地方在于,虽然RegExp 类也不是JavaScript 的基本数据 类型,但我们在创建正则表达式对象时,可以不需要用 new关键字就可以创建,
如 var re = /[1-9][0-9]*/ ; 这样就直接定义了正则表达式对象,因为在 JavaScript 中,一对斜线中包括一个文本就认为构成了一个正则表达式对象。
下面就示例用正则表达式判断输入的 Email 和手机号是否合法:
错误对象:JavaScript 中定义了几个用于处理错误类型的类,有: Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError 。和Java 中的异常处理方式类似, JavaScript 中的 错误对象可以用 try...catch...finally 语句来处理,示例如下:
3.2 变量
JavaScript 是一种弱类型的语言, 这就意味着一个 JavaScript 变量可以指 向任何数据类型,例如:
var i = 10; i = “ten ”; 变量的作用域
var scope = “global scope ”; // 全局变量 function checkscope() {
var local = “local scope ”; // 局部变量}
注意:除函数中的变量为局部变量外,其他的全部为全局变量。 4.3 函数
JavaScript 中: function add(a, b) {
return a + b; }
Java 中:
public int add(int a, int b) {
return a + b; }
函数的参数: arguments 对象
在一个函数中,会有一个隐含的 arguments 对象来保存函数的参数,这样 在有些时候,我们在定义函数时,可以不明确指定函数所需要的参数,如下:
四、封装的实现
下面以一个详细的示例来说明常用的私有实例成员、 公有实例成员和公有静 态成员的封装。
Human = function ( name ) // 等于function Human(name)
{
var me = this ; // 私有属性
var _name = null ;