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