JavaScript原型和繼承
(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 (){
//創(chuàng)建一個(gè)人員類
function Person(n){
this.name=n;
this.getAge=function (age){
alert(age);
}
}
//創(chuàng)建教師類
function Teacher(name,books){
//call方法可以將一個(gè)函數(shù)的對象上下文,從初始化變成由this來決定
//調(diào)用Person的構(gòu)造函數(shù),
Person.call(this, name);//this就是person的this,name屬性就是person的屬性
this.books=books;
}
//讓教師類繼承人員類
Teacher.prototype=new Person();
Teacher.prototype.constructor=Teacher;//教師的構(gòu)造方法還是使用教師自己的構(gòu)造方法
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.讓子類原型類屬性等于父類的原型屬性,初始化一個(gè)中間空對象,為了轉(zhuǎn)換主父類關(guān)系
var f = function(){};
f.prototype=superClass.prototype;
//2.讓子類繼承f
subClass.prototype=new f();
subClass.prototype.constructor=subClass;
//3.為子類增加屬性,繼承父類的原型對象
subClass.fuLei=superClass.prototype;
//4.增加一個(gè)保險(xiǎn),就算父類的原型類是超類object,也要把父類的構(gòu)造函數(shù)的級別降下來
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);
})()