/**
* 當該函數中有一個參數的情況下創建類
* 當該函數中有兩個參數的情況下,第一個參數是基類,第二個參數就是在基類的基礎上添加的內容。
*/
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原型的內容了
*/
(筆記) javascript 繼承
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.