js new關鍵字

new關鍵字作了什麼

function Animal(name){
    this.name = name;
}
 var cat = new Animal("cat")
複製代碼

Animal 自己是一個普通函數,但當經過new來建立對象時,Animal 就是構造函數。html

JS引擎執行這句代碼時,在內部作了不少工做,用僞代碼模擬其內部流程以下:bash

new Animal('cat') = {
   var obj = {};
   obj.__proto__ = Animal.prototype;
   var result = Animal.call(obj,"cat");
   return typeof result === 'object'? result : obj;
}

複製代碼
  1. 建立一個空對象 obj;
  2. 把 obj 的__proto__ 指向構造函數 Animal 的原型對象 prototype,此時便創建了 obj 對象的原型鏈:obj->Animal.prototype->Object.prototype->null
  3. 在 obj 對象的執行環境調用 Animal 函數並傳遞參數 「 cat 」 。 至關於 var result = obj.Animal("cat")。 當這句執行完以後,obj 便產生了屬性 name 並賦值爲 "cat"。關於 call 的用法請參考: 深刻理解 call、apply 和 bind
  4. 考察第 3 步的返回值,若是無返回值 或者 返回一個非對象值,則將 obj 做爲新對象返回;不然會將 result 做爲新對象返回。

根據以上過程,咱們發現 cat 其實就是【4】的返回值,所以咱們對 cat 對象的認知就多了一些markdown

原文連接app

相關文章
相關標籤/搜索