首页 / 脚本样式 / JavaScript / JavaScript面向对象程序设计(3) 对象
JavaScript面向对象程序设计(3) 对象2010-01-03 51cto FinderCheng1.对象对象是面向对象程序设计的基础概念之一,只需看看这个名字就已经知道了。在我们 熟悉的面向对象语言中,比如Java或者C++,都有着类似的对象定义方法。比如,我们想定义一个类,名 字叫Person,有两个属性:name和age,另外有一个方法,将显示出这个Person对象的名字和年龄,那么 我们可以用下面的代码实现:Java:public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void introduction() {
System.out.println("My name is " + this.name + ", my age is " + this.age);
}
public static void main(String[] args) {
Person p = new Person();
p.setName("Tom");
p.setAge(20);
p.introduction();
}
}C++的实现也是类似的,这里不再赘述。我们先来看一下这个类的定义:首先 声明属性,然后定义属性的getter和setter方法,用来外界访问私有变量,最后定义了它自己的方法。 这是一个比较常见的定义方式,以至于以后的很多语言,比如C#,都采用这种定义。那么,什么 是对象呢?对象不过是具有特定属性和方法的集合。虽然这并不是一个严格的定义,但是将属性和它的 名字(不妨我们把它的方法也看作是它的属性,这并没有什么不同)放在一起,形成一个集合,这就是对 象。也就是说,简单来看,对象就是这种具有“键-值”对的形式。2.JavaScript的 对象“键-值”对的形式……这个样子看上去是不是有些面熟?Bingo! 对了!这不就是数组的形式吗?嗯,恭喜你想到这一点!的确,在JavaScript中,对象的定义就是像数 组的定义。下面,我们在JavaScript中对这个Person进行一下定义:var Person = {
"name": "Tom",
"age": 20,
"introduction": function() {
alert("My name is " + this.name + ", my age is " + this.age);
}
};
Person.introduction();来看一下这段代码。看上去很像数组的定义,只不 过数组一般使用数字类型作为下标,而这里我们使用的是字符串。回想一下,其实在 JavaScript中,字 符串也是可以作为数组下标的,不是吗?好了,这里我们声明了一个对象Person,它有一个name,还有 一个age,而且还有一个方法显示出这两个属性。在JavaScript中,对象就是“键-值 ”对的形式,具体来说是"string-as-key": object-as-value的形式。也就是说,这个 键必须是string类型的,而值可以是任何类型的。那么,方法呢?其实,JavaScript中的function也是 一个类型,这个在后面会有描述的,这里仅仅先知道就可以了。这种数学上成为二元组的样式很常见, 数组就是这样的,只不过数组的键必须是int。同样,JavaScript的对象也是一个特殊的二元组,只不过 键是string类型的。这是不是就像是一种散列?或者说是哈希表?就是这个样子!如果说你觉得 每个属性名都要加一个引号觉得很别扭,那么你大可不加!像下面的语句,JavaScript完全认为你的正 确的:var Person = {
name: "Tom",
age: 20,
introduction: function() {
alert("My name is " + this.name + ", my age is " + this.age);
}
}
Person.introduction();我比较习惯于这种写法,看上去和Java等语言差不多 。