文章插圖

文章插圖
由于JavaScript的特性,一個構造函數就可以實現類的功能,所以有的時候,我們定義一個類,往往可以直接寫一個構造函數:
function Cup(cupCover, cupBody, cupBottom) {this.cupCover = cupCoverthis.cupBody = cupBodythis.cupBottom = cupBottom}復制代碼【js構造函數的構造函數是什么 js構造函數的八種方法】這樣的定義方式很靈活簡單,但有時候實例化出錯了,也不會有相應的提示 。比如我們這樣的實例化:
let cup = Cup('iron', 'plastic', 'rubber')復制代碼當我們沒有加上new的時候,編譯器并不會提示(弱類型的特點),而且由于Cup本身就是一個函數,所以在使用的時候,也可以正常運行 。但是當我們cup此時肯定不是Cup類的,顯而易見,當我們把Cup當作一個函數執行的時候,cup的值取決于函數的返回 。這里沒有返回,所以是undefined 。
那么我們執行完這個Cup()函數后,造成了什么影響呢?答案是Cup的屬性綁定到了全局變量上 。對于瀏覽器來說就是window
cup.cupCover // undefinedwindow.cupCover // "iron"復制代碼所以,我們該如何避免這種情況發生呢?我們可以稍稍改造一下Cup構造函數:
function Cup(cupCover, cupBody, cupBottom) {if(this instanceof Cup) {this.cupCover = cupCoverthis.cupBody = cupBodythis.cupBottom = cupBottom}else {return new Cup()}}復制代碼這樣當我們再次不小心執行let cup = Cup(‘iron’, ‘plastic’, ‘rubber’)時,由于此時的this并不是Cup的派生類,所以我們直接返回一個實例 。let cup = Cup('iron', 'plastic', 'rubber')cup.cupCover // "iron"復制代碼而這種形式的構造函數,就是今天要說的安全模式的構造函數 。- 喝野蜂蜜的好處有哪些
- ipad air2的參數 蘋果ipad air2型號
- excel怎么算連乘 excel的連乘函數
- 喝土蜂蜜的好處有哪些
- 喝紅糖蜂蜜水的好處有哪些
- 喝紅棗蜂蜜水的好處有哪些
- 喝檸檬蜂蜜的好處有哪些
- 青少年的營養與膳食搭配
- dp接口是干什么用的 dp是接口什么意思
- 傅程鵬程愫什么時候離的婚 非常的讓人意難平
