现在流行创建对象的时候不使用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的值”