封装
1、利用封装
function person(name,age)
{
this.name=name;
this.age=age;
this.showName=function()
{
alert(this.name);
}
this.showAge=function()
{
alert(this.age);
}
}
优点:会为每个对象创建独享的函数对象,所有的属性和方法都为私有的
缺点:方法和属性都是固定的,类似于java中的封装,方法和属性都是固定的
2、混合构造函数/原型方式:
function person(name,age)
{
this.name=name;
this.age=age;
}
person.prototype={
showName:function()
{
alert(this.name);
},
showAge:function()
{
alert(this.age);
}
}
var op=new person('blue',11);
op.showAge();
优点:属性私有后,改变各自的属性不会影响别的对象。同时,方法也是由各个对象共享的。在语义上符合面向对象的思想;
继承
1、包括属性的继承和方法的继承;
function person(name,sex)
{
this.name=name;
this.sex=sex;
}
person.prototype={
showName:function()
{
alert(this.name);
},
showSex:function()
{
alert(this.sex);
}
}
function worker(name,sex,job)
{
person.call(this,name,sex); //构造函数伪装,调用父级的构造函数-为了继承属性
this.job=job;
}
//原型链 通过原型继承父类的方法;
for(attr in person.prototype)
{
worker.prototype[attr]=person.prototype[attr];
}
worker.prototype.showJob=function()
{
alert(this.job);
}
var op=new person('blue','男');
var ow=new worker('blue','男','程序员');
op.showName(); //blue
op.showSex(); //男
ow.showName(); //blue
ow.showSex(); //男
ow.showJob(); //程序员
优点:父类新加的功能,子类也具备,子类新加的功能,不影响父类;