JavaScript在new一個物件的時候具體發生了什麼
阿新 • • 發佈:2018-12-17
我們經常使用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變數.