继承普通版
继承逻辑上都差很少,普通版调用方式比较繁琐,不利于反复大量的使用;
(function (){
//建立一我的员类
function Person(name){
this.name = name;
}
//建立教师类
function Teacher(name,books){
//call方法能够将一个函数的对象上下文从初始化变成由this来决定;
//调用person的构造函数,由于person没用new,因此他是个空对象;
//至关于Java中的super函数;
Person.call(this,name);
this.books = books;
}
//使老师类继承人员类;
Teacher.prototype = new Person();
Teacher.prototype.constructor = Teacher;
Teacher.prototype.getBook = function(){
return this.name + ' ' + this.books;
}
//测试
var victor = new Teacher('victor','chinese');
alert(victor.getBook());
})()
继承升级版
(function (){
//建立一我的员类
function Person(name){
this.name = name;
}
//建立教师类
function Teacher(name,books){
//call方法能够将一个函数的对象上下文从初始化变成由this来决定;
//调用person的构造函数,由于person没用new,因此他是个空对象;
//至关于Java中的super函数;
Person.call(this,name);
this.books = books;
}
/*建立Extend函数是为了程序中全部的继承操做*/
function extend(subClass,superClass){
//1.让子类的原型类属性等于父类的原型属性
//初始化一个中间空对象,为了转换主父类关系
var F = function(){};
F.prototype = superClass.prototype;
//2.让子类继承F;
subClass.prototype = new F();
subClass.prototype.constructor = subClass;
//3.为子类增长属性superClass
subClass.superClass = superClass.prototype;
//4.增长一个保险,就算是原型类的超类(object)那么也要把你的构造函数级别降下来
if ( superClass.prototype.constructor == Object.prototype.constructor ) {//Object为超类,首字母须要大写
superClass.prototype.constructor = superClass;
}
}
//测试
function Author(name,books){
Author.superClass.constructor.call(this,name);
this.books = books;
this.getBook = function(){
return this.name + ',' + this.books;
}
}
//继承
extend(Author,Person);
var victor = new Author('victor','javascript');
alert(victor.getBook());
})()