js 继承的两种方式

                function med(n){
                    this.n = n;
                    this.name = setName
                }
                
                med.prototype.aim = '营销计划';
                med.prototype.a = function(){alert("d9"+this.n)};
                function setName(){alert("name"+this.n);}
                var med1 = new med("d");
                    med1.name();



                    
                    
                
                
                    
                function wd(skill){
                    //med.apply(this,arguments);
                    this.skill = skill;
                }    
                
                //------华丽的分割线-----------------------------------------------------------------
                //这个extend函数就是YUI库如何实现继承的方法。利用 prototype模式的封装函数
                function extend(child, parent){
                    var f = function(){};
                    f.prototype = parent.prototype;
                    
                    child.prototype = new f();
                    child.prototype.constructor = child;
                }
                
                extend(wd, med);
                var wd1 = new wd("dd");
                    wd.prototype.aim = "dd";
                    //alert(wd1.aim);
                    wd1.a;
                
                var med1 = new med();
                    //alert(med1.aim);
                    

                //------华丽的分割线-----------------------------------------------------------------

              //方法2通过属性的复制 把父对象的属性全部复制到子对象中实现继承

                function extendCopy(child, parent){
                     var p = parent.prototype;
                    var c = child.prototype;
                    for (var i in p){
                        c[i] = p[i];
                    }
                }
                
                extendCopy(wd, med);
                var wd2 = new wd("ddddd");

                    //alert(wd2.aim);


/*                f.prototype = med.prototype;
                wd.prototype = new f();
                wd.prototype.constructor = wd;
                
                
                

                
                wd.prototype.aim = "haha";
                var wd1 = new wd(1);
                    alert(wd1.aim);
                var wd2 = new wd(2);
                    alert(med.prototype.aim);*/


注意 继承时 无法 继承 原型内定义的属性 如有需要请使用APPLY CALL

使用 APPLY CALL时修改子属性时会把父相同属性一同修改

所以两种方法请 大家按需所用

                


你可能感兴趣的:(c,function,prototype,yui)