JavaScript可以说是一个基于对象的编程语言,为什么说是基于对象而不是面向对象,因为JavaScript自身只实现了封装,而没有实现继承和多态。
JavaScript中的对象是无序(unordered)的属性集合,这些属性可以含有简单的数据类型、对象、函数;保存在一个对象属性中的函数也被称为这个对象的方法。
1,对象和属性
对象具有属性,访问如下:
objectName.propertyName
2,创建对象
利用object initializer创建对象
语法如下:
objectName = {property1:value1, property2:value2,..., propertyN:valueN}
例如:
myHonda = {color:"red",wheels:4}
myHonda = {color:"red",wheels:4,engine:{cylinders:4,size:2.2}}
利用Constructor Function创建对象
例如:
| function car(make, model, year) { this.make = make; this.model = model; this.year = year; } |
利用上述函数创建对象如下:
mycar = new car("Eagle", "Talon TSi", 1993);
3,增加属性
可以重新定义上述对象,加入属性。例如:
| function car(make, model, year, owner) { this.make = make; this.model = model; this.year = year; this.owner = owner } |
此时,实例化过程如下:
| car1 = new car("Eagle", "Talon TSi", 1993, rand); |
还可以利用如下语句:
| Car.prototype.color=null;//注意大写,前面定义的constructor function是小写,所有创建的object都会增加color属性 car1.color="black";//只有car1增加color属性 |
object拥有的属性,可以本身就是一个对象。如下,定义person对象
| function person(name, age, sex) { this.name = name this.age = age this.sex = sex } |
实例化2个person型对象
rand = new person("Rand McKinnon", 33, "M");
ken = new person("Ken Jones", 39, "M");
之后可以定义car,其包含owner属性本身就是persion的一个实例。如下:
| function car(make, model, year, owner) { this.make = make; this.model = model; this.year = year; this.owner = owner } |
实例化car对象时,如下:
| car1 = new car("Eagle", "Talon TSi", 1993, rand); car2 = new car("Nissan", "300ZX", 1992, ken); |
注意:如果访问car2的owner的name属性,通过如下的方法:
| car2.owner.name |
4,定义方法
语法如下:
object.methodname = function_name
其中,object为现存的对象名称,methodname为指定的方法名称(任意取名), function_name为已经存在的函数名称。
例如,上例的基础上添加一个独立方法
| function displayCar() { var result = "A Beautiful " + this.year + " " + this.make + " " + this.model; alert(result); } |
之后通过
| car1.displayCar=displayCar; |
设定car1的display方法。
此外,可以通过重新定义constructor function来添加方法。如下例。
| function car(make, model, year, owner) { this.make = make; this.model = model; this.year = year; this.owner = owner; this.displayCar = displayCar; } |




