寒潮ing,你可能在FaceTest中遇到(1)—— new運算符及手動實現

寫在前面javascript

    受去年大環境的影響,目前很現實的問題就是,今年使人滿意的工做不是那麼的好找。如今前端僅僅當個api user很難找到滿意的工做,因此本系列旨在接下來的一段時間裏分享一些前端知識,幫助更好的拿到滿意offer。前端


下面進入主題

new的過程實際上進行了四個步驟

  1. 建立一個新對象
  2. 將構造函數的prototype賦值給新對象的__proto__
  3. 構造函數中的this指向新對象,而且調用構造函數
  4. 若是構造函數無返回值,或者不是引用類型,返回新對象;不然爲構造函數的返回值。

手動實現

function MyNew(Fn,...args) {
	// 建立一個新對象
	let obj = {};
	// 將構造函數的prototype賦值給新對象的__proto__
	obj.__proto__ = Fn.prototype;
	// 將構造函數的this指向新對象obj,而且調用這個新對象
	let res = Fn.apply(obj,args);
	// 若是返回值不是引用類型,返回obj,不然返回res
	return res instanceof Object ? res : obj
}
function Fn(name='dd',age='18') {
	this.name = name;
	this.age = age;
}
let res = new Fn();
let myRes = new Fn('Charles','20');
console.log(res);
// {
// age: "18",
// name: "dd",
// __proto__: Object
// }
console.log(myRes);
// {
// age: "20",
// name: "Charles",
// __proto__: Object
// }
console.log(Object.getPrototypeOf(res) === Object.getPrototypeOf(myRes));
// true
複製代碼

結語java

    我會不按期的分享前端各類知識點還有我以及小夥伴實際中遇到的問題,第一次寫技術文章,歡迎各位大佬指出不對的地方。
    若是你不知道從哪開始準備,若是你想鞏固前端知識,那麼關注我吧,一章一個知識,看完不只不累還想再加會兒班,括弧笑。api

PS:部份內容會來自互聯網以及書籍,全是原創原諒我作不到哇。app

相關文章
相關標籤/搜索