构造函数。
一、什么是構(gòu)造函數(shù)?
1,構(gòu)造函數(shù)就是一個普通的函數(shù),創(chuàng)建方式和普通函數(shù)沒有區(qū)別,
不同的是構(gòu)造函數(shù)習(xí)慣上首字母大寫.
2.構(gòu)造函數(shù)和普通函數(shù)的區(qū)別就是調(diào)用方式的不同
普通函數(shù)是直接調(diào)用,而構(gòu)造函數(shù)需要使用new關(guān)鍵字來調(diào)用.
二、構(gòu)造函數(shù)的執(zhí)行流程
1.立刻創(chuàng)建一個新的對象
2.將新建的對象設(shè)置給函數(shù)中的this,在構(gòu)造函數(shù)中可使用this來引用新建的對象
3.逐行執(zhí)行函數(shù)中的代碼
4.將新建的對象作為返回值返回
-使用同一個構(gòu)造函數(shù)創(chuàng)建的對象,我們稱為一類對象,
也將一個構(gòu)造函數(shù)稱為一個類。
我們將通過一個構(gòu)造函數(shù)創(chuàng)建的對象,稱為該類的實例
- 對this的情況進行總結(jié):
1.當(dāng)以函數(shù)的形式調(diào)用時,this就是window對象
2.當(dāng)以方法的形式調(diào)用時,this就是調(diào)用方法的這個對象
3.當(dāng)以構(gòu)造函數(shù)的形式調(diào)用時,this就是新創(chuàng)建的對象
使用instanceof 可以檢查一個對象是否是一個類的實例
語法:對象 instanceof 構(gòu)造函數(shù)
如果是實例,則返回true,否則返回false
三、sayhello方法
???- 在創(chuàng)建Person構(gòu)造函數(shù)中,為每個對象都添加了一個sayhello方法
目前我們的方法都是在構(gòu)造方法內(nèi)部創(chuàng)建的,也就是構(gòu)造函數(shù)每執(zhí)行一次就會創(chuàng)建一???個新的sayhello方法,也就是說所有實例的sayhello都是唯一的
這樣就導(dǎo)致了構(gòu)造函數(shù)執(zhí)行一次就會創(chuàng)建一個新的方法
執(zhí)行多少次就會創(chuàng)建多少個新的方法,而這些方法都是一模一樣的,這樣就導(dǎo)致了內(nèi)存空間的浪費,其實我們可以讓所有對象共享同一個方法
?????
- 原型對象 ???
???-我們創(chuàng)建的每一個函數(shù),解析器都會向函數(shù)中添加一個屬性prototype
這個屬性對應(yīng)著一個對象,這個對象就是我們所謂的原型對象
如果函數(shù)作為普通函數(shù)調(diào)用prototype沒有任何作用
當(dāng)函數(shù)以構(gòu)造函數(shù)的形式調(diào)用時,它所創(chuàng)建的對象中都有會一個隱藏的屬性
指向該構(gòu)造函數(shù)的原型對象,我們可以通過__proto__來訪問該屬性
?????
????原型對象就相當(dāng)于一個公共的區(qū)域,所有同一個類的實例都可以訪問到這個原型對象
我們可以將對象中共有的內(nèi)容,統(tǒng)一設(shè)置到原型對象中
注:當(dāng)我們訪問對象的一個屬性或方法時,它會先在對象自身中尋找,如果有則直接使用,如果沒有則會去原型對象中尋找。如果找到則直接使用
以后我們創(chuàng)建構(gòu)造函數(shù)時,可以將這些對象共有的屬性和方法,統(tǒng)一添加到構(gòu)造函數(shù)的原型對象中,這樣不用分別為每個對象添加,也不會影響到全局作用域,就可以使每個對象都具有這些屬性和方法了。
注:原型對象也是對象,所以它也有原型,但我們使用一個對象的屬性或方法時,會先在自身中尋找
如果自身中有,則直接使用
如果沒有則去原型對象中尋找,如果原型對象中有則使用,如果沒有則去原型的原型對象中尋找,直到找到Object對象的原型
Object對象的原型沒有原型,如果在Object中依然沒有找到,則返回undefined
?
總結(jié)
- 上一篇: vue 判断页面是首次加载还是刷新
- 下一篇: mxnet symbol 解析