关于function中存在return语句时,使用new关键字的问题

  现在流行创建对象的时候不使用new关键字,即使用function中return的形式返回对象。这样消除了忘记使用new关键字而造成的调试错误的隐患。

1 function testObject(){
2   this.a = "hello";
3   this.b = {abc:"hello",cba:"olleh"};
4   return b;
5 }
6 
7 var test001 = testObject();

  从而能使用 var test01 = testObject()获得返回的对象。但是有一个疑问,带有return的function继续使用new关键字,会有什么样的结果呢?

 1 function testObject(){
 2   this.a = "hello";
 3   this.b = {abc:"hello",cba:"olleh"};
 4   return b;
 5 }
 6 
 7 var test001 = testObject();
 8 var test002 = new testObject();
 9 console.log(test001);
10 console.log(test002);

结果:  { abc: 'hello', cba: 'olleh' }
     { abc: 'hello', cba: 'olleh' }

为什么使用了new关键字和不使用new关键字的结果不一样呢?再继续做一个实验:

 1 function testObject(){
 2   this.a = "hello";
 3   this.b = {abc:"hello",cba:"olleh"};
 4   return a;
 5 }
 6 
 7 var test001 = testObject();
 8 var test002 = new testObject();
 9 console.log(test001);
10 console.log(test002);

结果: hello
    { a: 'hello', b: { abc: 'hello', cba: 'olleh' } }

当使用非对象的变量a当作返回值时,使用new关键字返回的是this指针。

经过查证如果函数有返回值,但是返回值是基本类型。那么new出来的this还是object.因为基本类型的prototype还是Object. 而如果不使用new,那么返回值就是你return的值”

posted on 2013-11-03 21:06  wenlonghor  阅读(220)  评论(0编辑  收藏  举报

导航