構(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ù)失敗。沒有new與this就不是構(gòu)造函數(shù)