(笔记) javascript 继承

来源:互联网 发布:阿里云不能开启gpu 编辑:程序博客网 时间:2024/06/02 03:15
/** * 当该函数中有一个参数的情况下创建类 * 当该函数中有两个参数的情况下,第一个参数是基类,第二个参数就是在基类的基础上添加的内容。 */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是一个functionvar Person = extend({name:"刘KKK",id:4});alert(typeof Person);var SupPerson = extend(Person, {sex:"男"});var sp = new SupPerson();//alert(typeof sp); objectalert("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原型的内容了 */

0 0