高級面向對象之 類式繼承

<!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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章