JS——new与return

默认情况下,函数的返回值为undefined(即没有定义返回值)。
  但是构造函数比较例外,new构造函数在没有return的情况下默认返回新创建的对象。然而,在有return的情况下,如果返回值为基本数据类型(string,number,boolean,undefined,null),那么返回值仍然为新建对象实例。
  只有当定义返回一个非基本数据类型的对象,函数的返回值才为指定的对象。在这种情况下,this值所引用的对象就被丢弃了。

如果指定的返回值是基本数据类型的话,仍然会返回新对象

<script>
    function A(){
        this.x=3;
        return "OK";
    }
    var a = new A();
    console.log(a instanceof A);         //true
    console.log("x" in a);               //true
</script>

如果指定返回对象了的话,被返回的对象就成了指定的对象值。在这种情况下,this值所引用的对象就被丢弃了。

<script>
    function B(){
        this.x=3;
        return Object("OK");
    }
    var b = new B();
    console.log("x" in b);              //false
    console.log(b instanceof B);        //false
    console.log(b instanceof String);   //true
</script>

更直观的例子:

<script>
    function User( name, age){
        this.name = name;
        this.age = age;

    // return;                              // 返回 this
    // return null;                         // 返回 this
    // return this;                         // 返回 this
    // return false;                        // 返回 this
    // return 'hello world';                // 返回 this
    // return 2;                            // 返回 this

    // return [];                            // 返回 新建的 []
    // return function(){};                  // 返回 新建的 function,抛弃 this
    // return new Boolean( false);           // 返回 新建的 boolean,抛弃 this
    // return new String( 'hello world');    // 返回 新建的 string,抛弃 this
    // return new Number( 32);               // 返回新的 number,抛弃 this
    }
    var user=new User("小白",20)
    console.log(user);
</script>

返回值为简单的基本数据类型,而不是一个对象(包括基本类型的对象)的话,那么返回值仍然为新创建的对象。

内容参考:http://blog.sina.com.cn/s/blog_7a8c8ac90101hzrq.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,634评论 0 4
  • 此刻和彼时隔一条河 河的对岸,烟雾缭绕 我和我的影子坐在地面 迎冷风掠过,掠过神经 此刻和暖光坐在树下 在定格的时...
    风影骑迹阅读 1,360评论 0 1
  • 如果今天是你生命中的最后一天,你会怎么度过呢? 你是不停的祈求上天,让他赐予你更多的时间,还是珍惜当下...
    苏紫Suzy阅读 2,860评论 0 2
  • 昨天晚上有一个非常好的朋友,给我发来一条信息,原文如下: “今天我做了一件很糗的事情,搭讪被拒绝了,哈哈哈” “我...
    三个郭敬明阅读 4,547评论 0 2
  • 在centos7中修改hostname是区别于其余系统的。 在centos7中,有个工具包hostname...
    简陌刀丶阿吉阅读 3,097评论 0 0

友情链接更多精彩内容