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