(function (){
function Person(){
this.getAge=function (age){
alert(age);
}
}
//让此类的所有对象有name属性,showName方法
Person.prototype.name="yjw";
Person.prototype.showName=function(){
alert(this.name);
}
// new Person().showName();
var v={};
//让空对象v继承Person,含有Person的所有属性和方法
v.__proto__=new Person();
v.__proto__.constructor=v;
v.getAge(1);
v.showName();
})()
(function (){
//创建一个人员类
function Person(n){
this.name=n;
this.getAge=function (age){
alert(age);
}
}
//创建教师类
function Teacher(name,books){
//call方法可以将一个函数的对象上下文,从初始化变成由this来决定
//调用Person的构造函数,
Person.call(this, name);//this就是person的this,name属性就是person的属性
this.books=books;
}
//让教师类继承人员类
Teacher.prototype=new Person();
Teacher.prototype.constructor=Teacher;//教师的构造方法还是使用教师自己的构造方法
Teacher.prototype.getBook = function(){//给教师类的原型添加方法
return this.name+" "+this.books;
}
var jim = new Teacher("jim","extjs");
// alert(jim.getBook());
//jim.getAge(2);
function extend(subClass,superClass){
//1.让子类原型类属性等于父类的原型属性,初始化一个中间空对象,为了转换主父类关系
var f = function(){};
f.prototype=superClass.prototype;
//2.让子类继承f
subClass.prototype=new f();
subClass.prototype.constructor=subClass;
//3.为子类增加属性,继承父类的原型对象
subClass.fuLei=superClass.prototype;
//4.增加一个保险,就算父类的原型类是超类object,也要把父类的构造函数的级别降下来
if(superClass.prototype.constructor==Object.prototype.constructor){
superClass.prototype.constructor=superClass;
}
}
function Student(name,books){
Student.fuLei.constructor.call(this,name);
this.books=books;
this.getBooks=function(){
return this.name+" "+this.books;
}
}
extend(Student, Person);
var s = new Student("s","a");
alert(s.getBooks());
s.getAge(2);
})()