<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
function Aaa(){ // 父類
this.name = [1,2,3];
}
Aaa.prototype.showName = function(){
alert(this.name);
};
function Bbb(){ // 子類
Aaa.call(this);
}
// 這4句代碼實現繼承
var F = function(){};
F.prototype = Aaa.prototype;
Bbb.prototype = new F();
Bbb.prototype.constructor = Bbb; // 修正指向問題
//F是空對象,所以幾乎不佔內存。這時,修改Bbb的prototype對象,就不會影響到Aaa的prototype對象。
var b1 = new Bbb();
var b2 = new Bbb();
b1.name.push(4);
alert(b1.name);
alert(b2.name);
// 下面出自阮一峯 博客
注: 我們可以將上面的過程封裝爲一個函數
function extend(Child, Parent) {
var F = function(){};
F.prototype = Parent.prototype;
Child.prototype = new F();
Child.prototype.constructor = Child;
Child.uber = Parent.prototype;
}
這個extend函數,就是YUI庫如何實現繼承的方法。
另外,說明一點,函數體最後一行
Child.uber = Parent.prototype;
意思是爲子對象設一個uber屬性,這個屬性直接指向父對象的prototype屬性。
(uber是一個德語詞,意思是"向上"、"上一層"。)這等於在子對象上打開一條通道,
可以直接調用父對象的方法。這一行放在這裏,只是爲了實現繼承的完備性,純屬備用性質
</script>
</body>
</html>
高級面向對象之 類式繼承
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.