(筆記) javascript 繼承

/**
 * 當該函數中有一個參數的情況下創建類
 * 當該函數中有兩個參數的情況下,第一個參數是基類,第二個參數就是在基類的基礎上添加的內容。
 */

function extend(obj, prop){
	function F(){
		
	}
	/**
	 * 當第一次調用extend方法的時候,obj是一個json格式的對象。
	 */
	if(typeof obj == "object"){// 這時obj是一個obj,obj代表的是一個json格式的對象。
		for(var name in obj){
			F.prototype[name] = obj[name];
		}
	} else{
		F.prototype = obj.prototype;// 這時,obj就是個函數了,obj所代表的是Person。把該函數的原型賦值給F的原型,這個時候F的原型就擁有obj的原型中的所有的內容了。
		for(var name in prop){
			F.prototype[name] = prop[name];
		}
	}
	return F;
}


// 這裏的person是一個function,以爲extend的返回值是一個F,F是一個function
var Person = extend({
	name:"劉KKK",
	id:4
});
alert(typeof Person);

var SupPerson = extend(Person, {sex:"男"});

var sp = new SupPerson();//alert(typeof sp); object
alert("name: " + sp.name);
alert("id: " + sp.id);
alert("sex: " + sp.sex);

/**
 * 總結:
 * 	1、在此案例中先定義了一個函數function extend(obj, prop).
 * 	2. 當第一次調用該函數時,只傳遞一個參數,也就是var Person = extend(obj={json格式的對象});,也就是說Person就成了一個函數(或者說類).
 * 		可以寫成
 * 			var Person = function(){}.其中Person.prototype也就有了傳遞進去的參數。
 * 	3. 這個時候,extend()就完成了它的第一次革命任務。
 * ==================================================================================================
 * 	4. 當第二次調用extend時,傳遞了兩個參數。
 * 		這時,把Person當做參數傳遞到該函數。obj代表的Person就是一個function了,而不是一個object了。
 * 	5. 然後,通過F.prototype = obj.prototype;該動作把obj代表的Person的prototype交個了F。F就擁有了Person原型的內容了
 */

發佈了27 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章