前端面試—new運算子的原理決議
博客說明
文章所涉及的資料來自互聯網整理和個人總結,意在于個人學習和經驗匯總,如有什么地方侵權,請聯系本人洗掉,謝謝!
new實體
JavaScript中new運算子用于創建一個給定建構式的物件實體
function Person(name, age){
this.name = name;
this.age = age;
}
const res = new Person('Tom', 20)
console.log(res) // Person {name: "Tom", age: 20}
原型,建構式,實體的關系
- 原型(prototype):一個簡單的物件,用于實作物件的屬性繼承,可以簡單理解成物件的父親,在火狐和谷歌中,每個js物件中都包含一個proto(非標準)的屬性指向它爹(該物件原型),可obj.__proto__進行訪問,
- 建構式:可以 通過new來新建一個物件 的函式,
- 實體:通過 建構式 和 new 創建出來的 物件,就是實體,實體通過proto指向原型,通過constructor指向建構式,
因此看得出三者的關系
實體.__proto__===原型
原型.constructor === 建構式
建構式.prototype === 原型
實體.constructor === 建構式
new運算子實作原理
- 新生成一個物件
- 鏈接到原型
- 系結this
- 回傳新物件(如果建構式有自己 retrun 時,則回傳該值)
function myNew(constrc, ...args) {
const obj = {}; // 1. 創建一個空物件
obj.__proto__ = constrc.prototype; // 2. 將obj的[[prototype]]屬性指向建構式的原型物件
const result = constrc.apply(obj, args); // 3.將constrc執行的背景關系this系結到obj上,并執行
return result instanceof Object ? result : obj; //4. 如果建構式回傳的是物件,則使用建構式執行的結果,否則,回傳新創建的物件
}
// 使用的例子:
function Person(name, age){
this.name = name;
this.age = age;
}
const res = myNew(Person, 'Tom', 20)
console.log(res) // Person {name: "Tom", age: 20}
感謝
以及勤勞的自己,個人博客,GitHub
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/97438.html
標籤:Java
上一篇:Delphi XE2 按 F9 無法運行的問題, 急啊!!!!!!
下一篇:Http狀態碼詳解

