美文网首页
js构造函数内部出现return会怎样

js构造函数内部出现return会怎样

作者: 落崖惊风yxy | 来源:发表于2017-08-03 19:38 被阅读0次

    一提到js构造函数,可能很多人都会想到构造函数内部最好不要出现return甚至不要出现return的警告语。
    那么,假如js构造函数内部出现了return,又会怎样呢?

    js构造函数内部没有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看看结果,如图所示:

    QQ图片20170803190138.png

    注意红圈圈,显示p对象的类型是People。

    如果一:
    如果在构造函数内部添加上一个return关键字会怎样呢?

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

    还是输出一下p,结果如图所示:

    QQ图片20170803190836.png

    是不是没有任何变化?!所以,仅仅添加一个return关键字是没有影响的。

    如果二:
    那如果return一个数字呢?

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

    同上,还是输出p查看结果,如图所示:

    QQ图片20170803191249.png

    是不是有没有任何变化?!那就是了,return数字类型的也没有影响。

    如果三:
    return一个字符串

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

    结果:

    QQ图片20170803191711.png

    结果和没有添加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); 
    

    结果如图所示:


    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); 
    

    结果如图所示:

    QQ图片20170803192338.png

    对比发现,return null;也是没有影响的。

    如果六:
    添加return {};

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

    结果如图所示:

    QQ图片20170803192605.png

    等等,怎么显示p的类型是Object,难道不应该是People吗?
    是的,你没有说错,p的类型应该是People;但这里确实显示的是Object。说明添加return {};是有影响的,把构造函数内部的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); 
    

    结果如下:

    QQ图片20170803193253.png

    p的类型变成了function,显然受影响了。

    综上所述,有没有发现问题?
    构造函数内部仅仅添加return关键字,或者return的是数字、字符串、null、undefined等值类型的数据的时候,使用new关键字执行后对新产生的对象是没有影响的。
    但是,一旦构造函数内部return的是对象、函数等引用类型的数据,使用new关键字执行后新对象的具体类型就被改变了。显然,正常情况下这并不是我们想要的结果。
    而且,即使return值类型的数据不会改变新对象的具体类型,但也并没有什么实际意义。
    所以呢,js构造函数内部还是不要出现return比较好啦!

    相关文章

      网友评论

          本文标题:js构造函数内部出现return会怎样

          本文链接:https://www.haomeiwen.com/subject/actmlxtx.html