构造函数用return 会出显什么情况

首先我们都知道js中构造函数一般应该是这样的

  1. function Super (a) {  
  2.    this.a = a;  
  3. }  
  4. Super.prototype.sayHello = function() {  
  5.    alert('hello world');  
  6. }  

但如果在构造函数中 加入 return 会是什么结果呢

 

  1. function Super (a) {  
  2.    this.a = a;  
  3.   
  4.    return {a: 2};  
  5. }  
  6. Super.prototype.sayHello = function() {  
  7.    alert('hello world');  
  8. }  



new 这个构造函数会返回什么? 

 

Object {a: 2}

为什么会这样?我们的构造函数和原型上的方法呢?别急 我们再来 列出集中情况

  1. //直接 return  
  2. function A(){  
  3.    return;  
  4. }  
  5. //返回 数字类型  
  6. function B(){  
  7.    return 123;  
  8. }  
  9. //返回 string类型  
  10. function C(){  
  11.    return "abcdef";  
  12. }  
  13. //返回 数组  
  14. function D(){  
  15.    return ["aaa", "bbb"];  
  16. }  
  17. //返回 对象  
  18. function E(){  
  19.    return {a: 2};  
  20. }  
  21. //返回 包装类型  
  22. function F(){  
  23.    return new Number(123);  
  24. }  


结果分别是

  1. A {}  
  2. B {}  
  3. C {}  
  4. ["aaa", "bbb"]  
  5. Object {a: 2}  
  6. Number {[[PrimitiveValue]]: 123}  
  7. A {}  

 

我们可以看出 return 基本类型 会返回一个空对象 

而返回对象类型 则会返回这对象

与我们常用的那个构造函数相结合

  1. function Super (a) {  
  2.    this.a = a;  
  3.    return 123;  
  4. }  
  5. Super.prototype.sayHello = function() {  
  6.    alert('hello world');  
  7. }  
  8. function Super_ (a) {  
  9.    this.a = a;  
  10.    return {a: 2};  
  11. }  
  12. Super_.prototype.sayHello = function() {  
  13.    alert('hello world');  
  14. }  

 

分别new Super(1); new Super_(1);

结果是

Super {a: 1} 具有原型方法sayHello

Object {a: 2}

 

好了现在我们总结下 在构造函数中 return 基本类型 不会影响

构造函数的值而 return 对象类型 则会替代构造函数返回该对象

posted @ 2018-07-17 09:50  ypm_wbg  阅读(1727)  评论(0编辑  收藏  举报