1. 程式人生 > >JavaScript在new一個物件的時候具體發生了什麼

JavaScript在new一個物件的時候具體發生了什麼

我們經常使用new去呼叫的一個構造器函式, 但是new之後到底做了什麼呢?

如:

var Person = function (name) {
this.name = name;
}
var p = new Person("Boring");


以上程式碼在呼叫時,會變成如下 

var p = (Person (name) {
var _newObj = { //#0
constructor: Person; // #1
__proto__: Person.prototype; //#2
};
_newObj.constructor(name); //#3
return _newObj; //#4
})();


解析:

#0 建立一個新的物件,_newObj;
#1 將物件的constructor賦值為Person,即構造器函式;
#2 將物件的__proto__屬性賦值為Person.prototype,即原型鏈的概念;
#3 使用構造器函式的方法設定name屬性this.name = name;可以轉成_newObj.constructor.call(_newObj, name),此時的this就是指向_newObj,由於call的原因;
#4 返回改物件給p變數.