在Js中,咱們使用了new關鍵字來進行實例化app
那麼在這個new的過程當中到底發生了什麼?函數
關於構造函數的returnthis
正常來說構造函數中是不用寫return語句的,由於它會默認返回新建立的對象。spa
可是,若是在構造函數中寫了return語句,若是return的是一個對象,那麼函數就會覆蓋掉新建立的對象,而返回此對象。prototype
若是return的是基本類型如字符串、數字、布爾值等,那麼函數會忽略掉return語句,仍是返回新建立的對象。3d
1 function Foo(){ 2 this.a = 1; 3 this.b = 2; 4 } 5 Foo.prototype.sayMessage = function(){ 6 console.log(this.a+ this.b); 7 } 8 9 var obj = new Foo();
咱們來看看返回了什麼:code
1 function Foo(){ 2 this.a = 1; 3 this.b = 2; 4 return { 5 myName: 'GaryGuo' 6 } 7 } 8 Foo.prototype.sayMessage = function(){ 9 console.log(this.a+ this.b); 10 } 11 12 var obj = new Foo();
咱們再來看看返回了什麼:對象
其實在new的過程當中發生了四步操做:blog
1 var obj = new Object(); 2 obj.__proto__ = Foo.prototype; 3 var returnVal = Foo.apply(obj, arguments); 4 obj = (returnVal instanceof Object && returnVal) || obj;