原型式继承
对象的构造函数可以从其他对象中继承方法,它创建出一个原型对象后,所有其他的新对象都可以基于这个原型对象来构建。
function Person (name) {
this.name =name;
}
Person.prototype.getName= function () {
return this.name
};
function User(name,password) {
this.name = name;
this.password = password;
}
User.prototype = new Person();
User.prototypoe.getPassword = function () {
return this.password;
}
类式继承
function Person () {
this.name ="My name";
this.age = 23;
this.getName = function () {
return this.name;
}
};
Person.prototype.getAge = function () {
return this.age;
};
// Sub class
function reader() {
Person.call(this);//调用父类的构造函数
};
reader.prototype = new Person();//把父类的一个实例对象赋给子类的prototype对象。这样子类能够拥有父类的所有属性和方法。
reader.prototype.constructor = reader;//由于子类的构造函数被覆盖,所以需要重置构造函数。
Base库:
//创建一个新的类
var Person = Base.extend( {
constructor:function (name ) {
this.name =name;
}
//Person 类的一个简单方法
getName:function (){
return this.name;
}
});
//创建一个新的继承自Person类的User类
var User = Person.extend( {
constructor:function (name,password) {
this.base(name);
this.password = password;
},
getPassword:function () {
return this.password;
}
});
Base.extend(...)用于创建新的基本构造函数对象。这个函数接收的唯一参数是包含属性和值的简单对象。对象中的所有属性和值都被添加到要生成的对象里,作为其原型方法。
Person.extend(..)是Base.extend(...)语法风格的另一个版本。因为所有的构造函数都使用过.extend()方法来获得它们自身的.extend方法,。
this.base(...)用来调用一个已被重载的父类方法。