Javascript new 對象的過程

首先看一下下面的代碼

function User(name , age, career) {
    this.name = name
    this.age = age
    this.career = career 
}
const user = new User('ryan', 19, 'fe')
console.log(user)  // {name: "ryan", age: 19, career: "fe"}
function newUser(name , age, career) {
  return {
    name,
    age,
    career ,
  }
}
const newuser = newUser('ryan', 19, 'fe')
console.log(newuser)  // {name: "ryan", age: 19, career: "fe"}

想想這兩種獲取對象的方式有什么不同?

再看看下面的代碼

function User(name , age, career) {
    this.name = name
    this.age = age
    this.career = career 
}
User.prototype.sayName = function () {
    console.log("Hello")
}
const user = new User('ryan', 19, 'fe')
console.log(user)  // {name: "ryan", age: 19, career: "fe"}
user.sayName() // Hello
function newUser(name , age, career) {
  return {
    name,
    age,
    career ,
  }
}
newUser.prototype.sayName = function () {
    console.log("Hello")
}
const newuser = newUser('ryan', 19, 'fe')
console.log(newuser)  // {name: "ryan", age: 19, career: "fe"}
newuser.sayName() // Uncaught TypeError: newuser.sayName is not a function

看到這里是不是感覺好像明白了什么

new 的過程和普通的函數(shù)返回不同,new 其實是一種繼承的方式, 通過new,實例與構(gòu)造函數(shù)通過原型鏈連接了起來出來,所以實例能訪問到構(gòu)造函數(shù)的屬性,具體過程如下

  1. 開辟一個塊內(nèi)存,創(chuàng)建一個空對象
  2. 執(zhí)行構(gòu)造函數(shù),對這個空對象進行構(gòu)造
  3. 給這個空對象添加proto屬性
  __proto__ = User.prototype  
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容