首页 > 对象返回值的区别

对象返回值的区别

  下面两种写法的区别

               var obj=function(){
                      this.myName="seve";
                      return {//这样写下面new的时候会报错
                          alert(1);
                      }
               }
               
               var obj=function(){
                      this.myName="seve";
                   //这样为什么却能弹出2和object
                      return  alert(2);
               }
               
               var ob=new obj();
               alert(ob);

因为你的第一个写法有两个问题:

所以,改成如下则可以成功运行:

var obj = function() {
 this.myName = "seve";
 return { //这样写下面new的时候会报错
   alert: alert(1)
 }
}

当然会报错了……对象字面量里直接函数调用,谁教你这么写的呢?

// 你 return 的是这么个东西,这语法不报错才见鬼了
{
    alert(1)
}

下面的写法是正确的,因为:

  1. 首先 alert(2) 调用了,于是你看到了第一个 2

  2. alert(2) 的返回值是 undefined,当构造函数最终返回的不是一个对象时,new 操作符会创建一个对象取代之,因此 var ob = new obj() 还是会得到一个对象实例

  3. alert(ob) 调用,于是你看到了 [object Object]

【热门文章】
【热门文章】