(1)对象字面量
var clock = {
hour:12,
minute: 10,
second: 10,
showTime: function(){
alert(this.hour + ":" + this.minute + ":" + this.second);
}
}
(2)创建Object实例
var clock = new Object();
clock.hour = 12;
clock.minute = 10;
clock.second = 10;
clock,showTime = function(){
alert(this.hour + ":" + this.minute + ":" + this.second);
}
使用Object实例方式创建的对象,可以动态的添加或修改属性和方法。
对象的创建模式
(1) 工厂模式
function createClock(hour, minute, second){
var clock = new Object();
clock.hour = hour;
clock.minute = minute;
clock.second = second;
clock.showTime = function(){
alert(this.hour + ":" + this.minute + ":" + this.second);
}
return clock;
}
工厂模式,即给出参数得到对象,把创建对象的过程封装起来,不能识别对象的类型。
(2)构造函数模式
function clock(hour, minute, second){
this.hour = hour;
this.minute = minute;
this.second = second;
this.showTime = function(){
alert(this.hour + ":" + this.minute + ":" + this.second);
}
}
构造函数模式创建对象时,应该注意以下几点:必须用new关键字,如果不用new关键字,此时就不会把clock当成构造函数使用了,而是当一个普通的函数,此时可能会给window全局作用域意外添加属性;由于实例话的时候,this指针会指向新的实例,每次实例化都要重建方法。
(3) 原型模式
不同于构造函数模式,原型模式是把所有的属性和方法都写在对象的prototype对象中。此模式的缺点是:不同实例不能拥有属于各自的私有属性,所有属性都是共享的。
function clock(hour,minute,second){
}
clock.prototype.hour=12;
clock.prototype.minute=12;
clock.prototype.second=12;
clock.prototype.showTime=function(){
alert(this.hour+":"+this.minute+":"+this.second);
}
(4)构造-原型模式
结合(2)和(3),此模式采用属于实例的私有属性放到构造函数中,属于实例的公共属性和方法放到对象的原型中。
function clock(hour,minute,second){
this.hour = hour;
this.minute = minute;
this.second = second;
}
clock.prototype.showTime=function(){
alert(this.hour+":"+this.minute+":"+this.second);
}