Js new到底發生了什麼

在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;
相關文章
相關標籤/搜索