在JavaScript中建立自定義對象都須要用new運算符,那麼建立對象的過程是什麼樣的呢?html
例如如今有以下構造函數:函數
function Person(name) { this.name = name; } Person.prototype = { constructor: Person, sayName: function() { alert(this.name); }; var jack = new Person("Jack");
首先,必須保證new運算符後跟着的是一個有[[Construct]]內部方法的對象,不然會拋出異常。this
接下來就是建立對象的過程:firefox
1.先建立一個原生對象,假定爲obj = {}或obj = new Object,。prototype
2.得到構造函數Person的prototype對象,並將其賦給obj的[[Prototype]]屬性。在firefox中它表現爲__proto__htm
3.call構造函數的內部方法,把其中的this賦值爲新建立的對象obj,並傳入所需參數。對象
4.執行構造函數,並返回建立的對象。ip
這裏有一點須要說明: 正常來說構造函數中是不用寫return語句的,由於它會默認返回新建立的對象。可是,若是在構造函數中寫了return語句,若是return的是一個對象,那麼函數就會覆蓋掉新建立的對象,而返回此對象;若是return的是基本類型如字符串、數字、布爾值等,那麼函數會忽略掉return語句,仍是返回新建立的對象。字符串