簡單了解:對象、構(gòu)造函數(shù)、 new

  • 構(gòu)造函數(shù)是什么?
    答:用于生成對象的函數(shù)。

  • 對象不是直接聲明即可嗎?為什么還要用構(gòu)造函數(shù)生成對象,如var obj = {},生成一個(gè)空對象。
    答:這是簡寫,var obj = {} 等價(jià) var obj = new Object(),本質(zhì)上也是用構(gòu)造函數(shù)生成的。

  • 那對象是什么?
    答:對象就是客觀(真實(shí)世界)存在的人、事、物體等實(shí)體在計(jì)算機(jī)邏輯(虛擬世界)中的映射。

  • 對象有什么用?
    答:封裝屬性(property)和方法(method)。

  • 構(gòu)造函數(shù)生成的對象與普通聲明的對象有什么不同?
    答:本質(zhì)上沒有,都是對象。根據(jù)需求生成構(gòu)造函數(shù)模板,該模板具有屬性與方法,再通過該模板生成對象,所以這些對象具有 共同 的屬性與方法,而普通生成的對象,也可自由封裝屬性與方法,若與構(gòu)造函數(shù)生成相比,可簡單理解為批量制造與單體制造。

    呃,還有一點(diǎn)較為關(guān)鍵的是 :
    構(gòu)造函數(shù)生成的對象的__proto__指向構(gòu)造函數(shù)的prototype,而普通聲明的對象的 __proto__指向 Object 的prototype

  • 構(gòu)造函數(shù)和普通函數(shù)有區(qū)別嗎?
    答:本質(zhì)上沒有,都是函數(shù),但作為區(qū)分,構(gòu)造函數(shù)名字的第一個(gè)字母通常大寫,其次是構(gòu)造函數(shù)的使用有以下特點(diǎn):
    1.函數(shù)體內(nèi)部使用了this關(guān)鍵字,代表了所要生成的對象實(shí)例。
    2.生成對象的時(shí)候,必須使用new命令。

  function Pokemon(name){          // var Pokemon = function (name) { }
    this.name = name
  }

  var pikachu = new Pokemon('pikachu')


  • 為什么一定要使用new,new的作用是什么?
    答:??1.創(chuàng)建一個(gè)空對象,作為將要返回的對象實(shí)例。
    ? ? ?????2.將這個(gè)空對象的原型,指向構(gòu)造函數(shù)的prototype屬性。
    ? ? ?????3.將這個(gè)空對象賦值給函數(shù)內(nèi)部的this關(guān)鍵字。
    ? ? ?????4.開始執(zhí)行構(gòu)造函數(shù)內(nèi)部的代碼。

  • 不添加new會(huì)怎樣?
    答:不添加new,在使用該函數(shù)時(shí),無法將this指向一個(gè)空對象,此時(shí)this便指向window,函數(shù)內(nèi)部構(gòu)造的對象屬性變量就成為全局變量,構(gòu)造函數(shù)失敗。沒有newthis就不是構(gòu)造函數(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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