JavaScript中有關new的問題
涉及面試題:
new
的原理是什麼?通過new
的方式建立物件和通過字面量建立有什麼區別?
在呼叫 new
的過程中會發生四件事情
- 新生成了一個物件
- 連結到原型
- 繫結
this
- 返回新物件
根據以上幾個過程,我們也可以試著來自己實現一個
new
- 建立一個空物件
- 獲取建構函式
- 設定空物件的原型
- 繫結
this
並執行建構函式 - 確保返回值為物件
function create() {
let obj = {}
let Con = [].shift.call(arguments)
obj.__proto__ = Con.prototype
let result = Con.apply(obj, arguments)
return result instanceof Object ? result : obj
}
- 對於物件來說,其實都是通過
new
產生的,無論是function Foo()
還是let a = { b : 1 }
。 - 對於建立一個物件來說,更推薦使用字面量的方式建立物件(無論效能上還是可讀性)。因為你使用
new Object()
的方式建立物件需要通過作用域鏈一層層找到Object
,但是你使用字面量的方式就沒這個問題
function Foo() {}
// function 就是個語法糖
// 內部等同於 new Function()
let a = { b: 1 }
// 這個字面量內部也是使用了 new Object()
相關文章
- java中有關日期的顯示問題 (轉)Java
- css3中有關transform的問題CSSS3ORM
- HTML 程式碼中有關父視窗問題HTML
- 關於javascript的this指向問題JavaScript
- 業務分析中有關詞彙表的常見問題 - modernanalystNaN
- 伺服器租用中有關頻寬的幾個問題伺服器
- 部署new 問題
- JavaScript new 關鍵詞解析及原生實現 newJavaScript
- 關於使用 Laravel new 新專案 報錯的問題Laravel
- benq,你好!框架中有關 getDataSource()問題請教一下ENQ框架
- javascript new關鍵字做了什麼JavaScript
- C#中有關欄位的訪問控制C#
- new和malloc的地址分配問題
- JavaScript專題之模擬實現newJavaScript
- javascript,還是javascript的問題JavaScript
- 請不要在JavaScript中使用new關鍵字JavaScript
- javascript的this指向問題JavaScript
- mysql語句中有引號的問題解決方案MySql
- JavaScript中的new map()和new set()使用詳細(new map()和new set()的區別)JavaScript
- JavaScript中有用的Array和Object方法JavaScriptObject
- JavaScript new 運算子JavaScript
- javascript模擬new的實現JavaScript
- JavaScript 模擬new的實現JavaScript
- VS2015 Update2中有關cordova和xamarin安裝的問題
- 多個DW同時更新,且表中有關係存在,需要注意的擊點問題。 (轉)
- JavaScript變數,資料和記憶體的相關問題JavaScript變數記憶體
- javascript小問題JavaScript
- url引數中有+、空格、=、%、&、#等特殊符號的問題解決符號
- Java中有關stringJava
- 問個Javascript replace 問題JavaScript
- JavaScript手寫new方法JavaScript
- javascript使用new建立物件JavaScript物件
- javascript 中function(){},new function(),new Function(),Function 摘錄JavaScriptFunction
- 關於new Object的探究Object
- javascript中的各種問題JavaScript
- JavaScript 的 this 指向問題深度解析JavaScript
- C#中有關屬性的演示C#
- Javascript中new的執行過程JavaScript