在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 麻煩梳理下這個(gè)函數(shù)的流程。

麻煩梳理下這個(gè)函數(shù)的流程。

        function Shape(){}
            Shape.prototype.name='Shape';
            Shape.prototype.toString=function(){
                var result=[];
                if(this.constructor.uber){
                    console.log(this.constructor);
                    //TwoDShape 也執(zhí)行了一次toString()方法
                    result[result.length]=this.constructor.uber.toString();            
                }    
                result[result.length]=this.name;
                return result.join(', ')
            }
            
            function TwoDShape(){}
            var F=function(){};
            F.prototype=Shape.prototype;
            TwoDShape.prototype=new F();
            TwoDShape.prototype.constructor=TwoDShape;
            TwoDShape.uber=Shape.prototype;
            TwoDShape.prototype.name='2D Shape';
            
            function Triangle(side,height){
                this.side=side;
                this.height=height 
            }
            var F=function(){};
            F.prototype=TwoDShape.prototype;
            Triangle.prototype=new F();
            Triangle.prototype.constructor=Triangle;
            Triangle.uber=TwoDShape.prototype;
            Triangle.prototype.name='triangle';
            Triangle.prototype.getArea=function(){
                return this.side*this.height/2;
            }
            var my =new Triangle(5,10);
            console.log(my.toString());

圖片描述

為什么Triangle也會(huì)執(zhí)行一次toString()方法,我對(duì)這個(gè)流程不太清楚,麻煩幫我梳理一下。
主要是那個(gè)被重寫的toString()里面執(zhí)行下來不太明白。

回答
編輯回答
瘋浪

知識(shí)點(diǎn)就是原型鏈繼承 + 函數(shù)遞歸
首先,在整個(gè)原型鏈上toString()只在Shape的原型上被覆寫,整個(gè)過程用的也只有這個(gè)函數(shù);
其次,toString()有his.constructor.uber.toString()明顯是個(gè)遞歸,toString()被調(diào)用三次依次如下:
my.toString() => TwoDShape.prototype.toString() => Shape.prototype.toString()
遞歸前的代碼正序執(zhí)行: Triangle => TwoDshape
遞歸后的代碼倒序執(zhí)行:triangle <= 2D Shape <= Shape

2018年2月27日 19:22