对象的创建
JavaScript中,对象的创建如下:
var car = {
"wheels":4,
"engines":1,
"seats":5
};
除此之外,使用构造函数也可以创建对象
构造函数通常使用大写字母开头,以便把自己和其他普通函数区别开。(其他函数用驼峰命名法)
下面便是一个构造函数:
var Car = function() {
this.wheels = 4;
this.engines = 1;
this.seats = 1;
};
在 构造函数 中, this
指向被此构造函数创建出来的对象 。所以,当我们在构造函数中写:
this.wheels = 4;
这时,它创建出来的新对象将带有 wheels 属性,并且赋值为 4.
可以认为 构造函数 描述了它所创建出来的对象。
构造函数的使用
使用构造函数时,我们通过在它前面使用 new 关键字 来对它进行调用,如下:
var myCar = new Car();
myCar 现在成为了 Car 的一个 实例(instance),它被 构造函数 描述成下面的样子:
{
wheels: 4,
engines: 1,
seats: 1
}
注:要使用 new 关键字 去调用构造函数。因为只有这样,Javascript才知道这是要去构造一个新 对象 ,并且把构造函数中的 this 指向这个新对象。
现在,当 myCar (即 Car 的一个 实例 )创建后,他可以像普通对象一样被使用,包括创建、访问、修改它的属性等,就像我们使用其他对象一样。如下:
myCar.turboType = "twin";
我们的 myCar 变量现在有了一个 turboType 属性了,且值为 “twin” 。
但是我们不想总是创建相同的对象,怎么办呢?
为了解决这个问题,我们要向 构造函数 中添加 参数 。像下面这样:
var Car = function(wheels, seats, engines) {
this.wheels = wheels;
this.seats = seats;
this.engines = engines;
};
现在,我们可以在调用 构造函数 时传入一组 参数 了。
var myCar = new Car(6, 3, 1);
这段代码将会使用这一组 参数 来创建出下面的对象:
{
wheels: 6,
seats: 3,
engines: 1
}
构造函数中的方法
对象拥有自己的特征,称为 属性,对象还有自己的函数,称为 方法 。
前面的构造函数中, this 指向当前(将要被创建的)对象中的 公有属性 。我们也可以创建 私有属性 和 私有方法 ,它们两个在对象外部是不可访问的。
通过 var
关键字去创建变量,来替代我们使用 this
创建 属性 。
比如,我们想记录我们的car行驶的 speed ,但希望外面的代码对 speed 的修改只能是加速或减速(而不是变成字符串、直接赋值成某个速度等其他操作),下例展示了如何实现这种控制模式。
var Car = function() {
// this is a private variable
var speed = 10;
// these are public methods
this.accelerate = function(change) {
speed += change;
};
this.decelerate = function() {
speed -= 5;
};
this.getSpeed = function() {
return speed;
};
};