首先我們都知道js中構造函數一般應該是這樣的
- function Super (a) {
- this.a = a;
- }
- Super.prototype.sayHello = function() {
- alert('hello world');
- }
但如果在構造函數中 加入 return 會是什么結果呢
- function Super (a) {
- this.a = a;
- return {a: 2};
- }
- Super.prototype.sayHello = function() {
- alert('hello world');
- }
new 這個構造函數會返回什么?
Object {a: 2}
為什么會這樣?我們的構造函數和原型上的方法呢?別急 我們再來 列出集中情況
- //直接 return
- function A(){
- return;
- }
- //返回 數字類型
- function B(){
- return 123;
- }
- //返回 string類型
- function C(){
- return "abcdef";
- }
- //返回 數組
- function D(){
- return ["aaa", "bbb"];
- }
- //返回 對象
- function E(){
- return {a: 2};
- }
- //返回 包裝類型
- function F(){
- return new Number(123);
- }
結果分別是
- A {}
- B {}
- C {}
- ["aaa", "bbb"]
- Object {a: 2}
- Number {[[PrimitiveValue]]: 123}
- A {}
我們可以看出 return 基本類型 會返回一個空對象
而返回對象類型 則會返回這對象
與我們常用的那個構造函數相結合
- function Super (a) {
- this.a = a;
- return 123;
- }
- Super.prototype.sayHello = function() {
- alert('hello world');
- }
- function Super_ (a) {
- this.a = a;
- return {a: 2};
- }
- Super_.prototype.sayHello = function() {
- alert('hello world');
- }
分別new Super(1); new Super_(1);
結果是
Super {a: 1} 具有原型方法sayHello
Object {a: 2}
好了現在我們總結下 在構造函數中 return 基本類型 不會影響
構造函數的值而 return 對象類型 則會替代構造函數返回該對象