js構(gòu)造函數(shù)內(nèi)部出現(xiàn)return會怎樣

一提到js構(gòu)造函數(shù),可能很多人都會想到構(gòu)造函數(shù)內(nèi)部最好不要出現(xiàn)return甚至不要出現(xiàn)return的警告語。
那么,假如js構(gòu)造函數(shù)內(nèi)部出現(xiàn)了return,又會怎樣呢?

js構(gòu)造函數(shù)內(nèi)部沒有return時:

    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <script type="text/javascript">
        var People = function(name,age,sex){
            this.name = name;
            this.age = age;
            this.sex =sex;
        }
        var p = new People(3); 
    </script>
</body>
</html>

輸出一下p看看結(jié)果,如圖所示:

QQ圖片20170803190138.png

注意紅圈圈,顯示p對象的類型是People。

如果一:
如果在構(gòu)造函數(shù)內(nèi)部添加上一個return關(guān)鍵字會怎樣呢?

        var People = function(name,age,sex){
            this.name = name;
            this.age = age;
            this.sex =sex;
            return;
        }
        var p = new People(3); 

還是輸出一下p,結(jié)果如圖所示:

QQ圖片20170803190836.png

是不是沒有任何變化?!所以,僅僅添加一個return關(guān)鍵字是沒有影響的。

如果二:
那如果return一個數(shù)字呢?

        var People = function(name,age,sex){
            this.name = name;
            this.age = age;
            this.sex =sex;
            return 1;
        }
        var p = new People(3); 

同上,還是輸出p查看結(jié)果,如圖所示:

QQ圖片20170803191249.png

是不是有沒有任何變化?!那就是了,return數(shù)字類型的也沒有影響。

如果三:
return一個字符串

        var People = function(name,age,sex){
            this.name = name;
            this.age = age;
            this.sex =sex;
            return "string";
        }
        var p = new People(3); 

結(jié)果:

QQ圖片20170803191711.png

結(jié)果和沒有添加return的時候是一樣的,即return字符串是沒有影響的。

如果四:
添加return undefined;

        var People = function(name,age,sex){
            this.name = name;
            this.age = age;
            this.sex =sex;
            return undefined;
        }
        var p = new People(3); 

結(jié)果如圖所示:


QQ圖片20170803192042.png

依然是沒有變化的,即return undefined;也是沒有影響的。

如果五:
添加return null;

        var People = function(name,age,sex){
            this.name = name;
            this.age = age;
            this.sex =sex;
            return null;
        }
        var p = new People(3); 

結(jié)果如圖所示:

QQ圖片20170803192338.png

對比發(fā)現(xiàn),return null;也是沒有影響的。

如果六:
添加return {};

        var People = function(name,age,sex){
            this.name = name;
            this.age = age;
            this.sex =sex;
            return {};
        }
        var p = new People(3); 

結(jié)果如圖所示:

QQ圖片20170803192605.png

等等,怎么顯示p的類型是Object,難道不應該是People嗎?
是的,你沒有說錯,p的類型應該是People;但這里確實顯示的是Object。說明添加return {};是有影響的,把構(gòu)造函數(shù)內(nèi)部的this給替換了。

如果七:
添加return function(){};

        var People = function(name,age,sex){
            this.name = name;
            this.age = age;
            this.sex =sex;
            return function(){};
        }
        var p = new People(3); 

結(jié)果如下:

QQ圖片20170803193253.png

p的類型變成了function,顯然受影響了。

綜上所述,有沒有發(fā)現(xiàn)問題?
構(gòu)造函數(shù)內(nèi)部僅僅添加return關(guān)鍵字,或者return的是數(shù)字、字符串、null、undefined等值類型的數(shù)據(jù)的時候,使用new關(guān)鍵字執(zhí)行后對新產(chǎn)生的對象是沒有影響的。
但是,一旦構(gòu)造函數(shù)內(nèi)部return的是對象、函數(shù)等引用類型的數(shù)據(jù),使用new關(guān)鍵字執(zhí)行后新對象的具體類型就被改變了。顯然,正常情況下這并不是我們想要的結(jié)果。
而且,即使return值類型的數(shù)據(jù)不會改變新對象的具體類型,但也并沒有什么實際意義。
所以呢,js構(gòu)造函數(shù)內(nèi)部還是不要出現(xiàn)return比較好啦!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容