/**
* 当该函数中有一个参数的情况下创建类
* 当该函数中有两个参数的情况下,第一个参数是基类,第二个参数就是在基类的基础上添加的内容。
*/
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 继承
最新推荐文章于 2024-06-18 09:26:21 发布