(笔记) 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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章