对象返回值的区别

  下面两种写法的区别

               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);
阅读 3.2k
2 个回答

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

  • 语法问题,对象定义的时候,每个成员之间,不能使用;,必须使用,

  • 定义的时候,如果是对象,其成员必须有索引,{false, null},是不行的,格式必须是:{bol: false, nil: null}

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

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]

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题