繼承普通版
繼承邏輯上都差很少,普通版調用方式比較繁瑣,不利於反覆大量的使用;
(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());
})()