javascript构造函数返回值详解
在说JavaScript构造函数返回值的问题前,我们先来了解new操作符:new操作符的作用就是实例化一个用户定义的对象类型(在javascript可以称之为对象也可以称之为函数也可以称之为类),new的基本语法:
new constructor[([arguments])]
其中constructor是一个函数,它定义了实例化对象的类型。
arguments是constructor调用时所需的值。
创建用户定义的对象至少需要两个步骤:
1;通过创建一个function定义一个对象类型。
2:通过new实例化一个对象。
可以连同指定的名称和属性创建一个对象类型。
当new foo(…)这行代码执行时,有下列事情依次发生:
1:一个对象将被创建,它将继承foo.prototype。
2:这个构造函数foo将连同指定的参数被调用,this指针将绑定到新创建的对象上,如果没有参数提供,new foo()也等同于new foo。
3:一个对象将通过foo构造函数返回,返回的值将是整个new表达式执行的结果。假如这个foo构造函数没有明确返回一个对象,那么这个对象的创建过程将回到第一步。
通常情况下构造函数没有明确的返回值,如果有需要的话你可以覆盖js默认的处理.如以下示例代码:
function foo() { return true; } var a = new foo; console.log(a);//foo,因为foo这个构造函数没有明确返回一个对象,所以创建过程回到第一步 function foo() { return []; } var b = new foo; console.log(b);//[],因为foo构造函数明确返回了数组对象,此时b继承Array.prototype,b.constructor是Array
通过以上的论述,相信大家已经明白在js中构造函数返回值的问题,通常情况下不建议在构造函数中指明返回的值(让js实施器自己去处理)。我想如果你真的需要指明构造函数返回的值,我建议你是不是应该重写你的代码,不要用构造函数的形式编写。
<script> //没有返回值 function Test0(){ this.name='test0'; } var test0=new Test0; //debugger; alert(test0);//输出[Object] alert(test0.name);//输出test0 //return 一个字符串对象 function Test(){ this.name='test'; return new String('123');// 返回字符串对象 } var test=new Test(); alert(test);//输出123 alert(test.name);//输出undefined,说明有构造函数创建的对象是字符串对象 //return 一个原始类型字符串 function Test2(){ this.name='test2'; return '123';// 返回字符串对象 } var test2=new Test2(); alert(test2);//输出[Object] alert(test2.name);//输出test0 </script>
参考资料
http://www.bennadel.com/blog/2522-providing-a-return-value-in-a-javascript-constructor.htm
http://stackoverflow.com/questions/1978049/what-values-can-a-constructor-return-to-avoid-returning-this
http://stackoverflow.com/questions/3350215/what-is-returned-from-a-constructor
加支付宝好友偷能量挖...
原创文章,转载请注明出处:javascript构造函数返回值详解