new關鍵字在例項化獲取物件時都做了什麼?是一道經常出現在前端面試時的問題。如果只是簡單的了解new關鍵字是例項化建構函式獲取物件,是萬萬不能夠的。更深入的層級發生了什麼呢?同時面試官想從這道題裡面考察什麼呢?
new關鍵字的作用:通過new關鍵字例項化建構函式,獲取物件。說一千道一萬,不如來段**看一看
// 定義建構函式
function person (name, age) , my age is $`) }}
// 建構函式的原型屬性和方法定義
person.prototype.color = 'yellow'
person.prototype.saybye = function ()
// 例項化
let p = new person('胡小帥', 18)
console.log(p)
// 當前屬性
console.log(p.name)
// 當前方法
p.say()
console.log(p.color)
// 原型方法
p.saybye()
通過new關鍵字例項化的物件p,具備了建構函式person中this的屬性:name、age,也具備了建構函式person的原型prototype的屬性color和方法saybye。下面我們來通過偽**來看看具體的實現過程。
初始化新物件
var o = {}
廣州品牌設計公司
原型的執行,確定物件o的原型鏈
o.__proto__ = person.prototype
繫結this物件為o,傳入引數;執行person建構函式,進行屬性和方法的賦值操作
person.call(o, '胡小帥', 18)
返回結果
注意:在通過該種方式獲取物件時,最終不一定返回的是物件o,要看建構函式的返回值是什麼。
如果函式返回的是基本型別值,實際會生成乙個物件,返回o
如果是函式返回的是引用型別值,則實際返回的是該引用型別值
new關鍵字 this關鍵字 base關鍵字
使用new,所做的三件事 1.類是引用物件,引用物件是在堆中開闢空間 在堆中開闢空間 2.在開闢的堆空間中建立物件 3.呼叫物件的構建函式 4.隱藏父類成員 子類的成員可以與隱藏從父類繼承的成員,類似於重寫。public new void sayhello this關鍵字的使用 1.代表當前類的物件...
手寫 new 關鍵字
function mynew func,args 新物件原型指向建構函式原型物件 obj.proto func.prototype 將建構函式的this指向新物件 let result func.obj,args 根據返回值判斷 return result instanceof object res...
new 關鍵字相關
初始化動態分配的陣列 動態分配陣列時,如果陣列元素具有類型別,將使用該類的預設建構函式 c primer第 2.3.4 節 實現初始化 如果陣列元素是內建型別,則無初始化 string psa new string 10 array of 10 empty strings int pia new i...