new操作符具體干了什么呢?

new關鍵字主要的作用是繼承

當一個構造函數(shù)前加上new的時候,背地里來做了四件事:
1.生成一個空的對象并將其作為 this;
2.將空對象的 proto 指向構造函數(shù)的 prototype;
3.運行該構造函數(shù);
4.如果構造函數(shù)沒有 return 或者 return 一個返回 this 值是基本類型,則返回this;如果 return 一個引用類型,則返回這個引用類型。

對應偽代碼:
對于const a = new Foo();,new干了以下事情

const o = new Object();//創(chuàng)建了一個新的空對象o
o.__proto__ = Foo.prototype;//讓這個o對象的` __proto__`指向函數(shù)的原型`prototype`
Foo.call(o);//this指向o對象
a = o;//將o對象賦給a對象

new一共經歷4個階段

1、創(chuàng)建一個空對象

var obj = new Object();

2、設置原型鏈

此時便建立了obj對象的原型鏈

obj._proto_ = Object.prototype;

3、讓Func的this指向obj,并執(zhí)行Func函數(shù)體

Object.call(obj);

4、判斷Func(構造函數(shù))的返回值類型

return typeof result === 'object'? result : obj;

構造函數(shù)默認return this,不用寫,如下

function A(){
  this.name = x;
  // return this; 
}

如果構造函數(shù)return是基本數(shù)據(jù)類型:

return 1
return "abc"

return 后的東西忽略,就是return {}

如果是return的是引用類型:
則以return的內容為準

function A(){
  this.name = x;  // 無效  
  return {a: 1}; 
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • ①創(chuàng)建一個空對象,并且 this 變量引用該對象,同時還繼承了該函數(shù)的原型。②屬性和方法被加入到 this 引用的...
    6659a0f02826閱讀 281評論 0 0
  • JavaScript的組成 JavaScript 由以下三部分組成:ECMAScript(核心):JavaScri...
    紋小艾閱讀 4,355評論 0 3
  • 1,javascript 基礎知識 Array對象 Array對象屬性 Arrray對象方法 Date對象 Dat...
    Yuann閱讀 1,148評論 0 1
  • 轉載請聲明出處 博客原文 隨手翻閱以前的學習筆記,順便整理一下放在這里,方便自己復習,也希望你有也有幫助吧 第一課...
    前端進階之旅閱讀 12,943評論 13 94
  • 姓名:徐祖德 公司:廣東思沃精密機械有限公司 230期_利他1組 272期_樂觀2組志工 【日精進打卡第144天】...
    徐祖德閱讀 123評論 0 0

友情鏈接更多精彩內容