javascript 继承
类:
//对象工厂模式
function createCar(color,doors,mpg){
var tmpCar = new Object();
tmpCar.color = color;
tmpCar.doors = doors;
tmpCar.mpg = mpg;
tmpCar.showColor = function() { alert(this.color); };
return tmpCar;
}
var car1 = createCar("red",4,20);
var car2 = createCar("blue",2,15);
car1.showColor();
car2.showColor();
//问题:这样写每个对象都有自己的showColor函数
function showColor(){ alert(this.color); }
function createCar(color,doors,mpg){
var tmpCar = new Object();
tmpCar.color = color;
tmpCar.doors = doors;
tmpCar.mpg = mpg;
tmpCar.showColor = showColor;
return tmpCar;
}
//用构造函数的方式,去掉函数内的临时变量
function Car(color,doors,mpg){
this.color = color;
this.doors = doors;
this.mpg = mpg;
this.showColor = showColor;
}
//问题:showColor函数不像对象的方法
//原型链
function Car(color,doors,mpg){
this.color = color;
this.doors = doors;
this.mpg = mpg;
}
Car.prototye.showColor = function() { alert(this.color); }
//继承
//原型链
function Person(name){
this.name=name;
}
Person.prototype.ShowName=function(){
return "hello "+this.name;
};
Person.prototype.ShowPara=function(para){
return "your para is:" + para;
}
function User(name,password){
this.name=name;
this.password=password;
}
User.prototype=new Person();
User.prototype.ShowPwd=function(){
return "your pwd: "+this.password;
};
var user=new User("terry",123456);
alert(user.ShowName());
alert(user.ShowPwd());
alert(user.ShowPara("ookk"));
//call方法
function Person(name){
this.name=name;
this.ShowName=function(){
return "hello "+this.name;
};
}
Person.prototype.ShowPara=function(para){
return "your para is:" + para;
}
function User(name,password){
Person.call(this,name);
this.name=name;
this.password=password;
}
User.prototype.ShowPwd=function(){
return "your pwd: "+this.password;
};
var user=new User("terry",123456);
alert(user.ShowName());
alert(user.ShowPwd());
//alert(user.ShowPara("ookk")); //错误, call没有包括prototype扩展的方法