封装继承

31 阅读1分钟
function extend(subClass,supClass){

            Object.setPrototypeOf(subClass.prototype,supClass.prototype);

            Object.defineProperties(Object.prototype,{

                super:{

                    value:function(){

                        supClass.apply(this,arguments);

                    }

                }

            })

            Object.defineProperties(subClass.prototype,{

                superProto:{

                    value:subClass.prototype

                }

            })

            var names=Reflect.ownKeys(supClass);

            for(var i=0;i<names.length;i++){

                var desc=Object.getOwnPropertyDescriptor(supClass,names[i]);

                Object.defineProperty(subClass.__proto__,names[i],desc);

            }

        }




        function Ball1(name){

            this.super(name)

        }

         Object.defineProperties(Ball1.prototype,{

            run:{

                value:function(){




                }

            },

            play:{

                value:function(){

                    this.superProto.play.apply(this,arguments);

                }

            },

            constructor:{

                value:Ball1

            }

        })




        extend(Ball1,Box1);




        var b=new Box("张三");

        var b1=new Box1("张三");

        console.log(b,b1);





        var c=new Ball("张三");

        var c1=new Ball1("张三");

        console.log(c,c1)

        console.dir(Ball1)

        console.dir(Ball)