構造函數的八種方法:javascript構造函數的作用

由於JavaScript的特性,一個構造函數就可以實現類的功能,所以有的時候,我們定義一個類,往往可以直接寫一個構造函數:

function Cup(cupCover, cupBody, cupBottom) {
    this.cupCover = cupCover
    this.cupBody = cupBody
    this.cupBottom = cupBottom
}
複製代碼

這樣的定義方式很靈活簡單,但有時候實例化出錯了,也不會有相應的提示。

比如我們這樣的實例化:

let cup = Cup('iron', 'plastic', 'rubber')
複製代碼

當我們沒有加上new的時候,編譯器並不會提示(弱類型的特點),而且由於Cup本身就是一個函數,所以在使用的時候,也可以正常運行。

但是當我們cup此時肯定不是Cup類的,顯而易見,當我們把Cup當作一個函數執行的時候,cup的值取決於函數的返回。這裡沒有返回,所以是undefined。

那麼我們執行完這個Cup()函數後,造成了什麼影響呢?答案是Cup的屬性綁定到了全局變量上。對於瀏覽器來說就是window

cup.cupCover // undefined
window.cupCover // "iron"
複製代碼

所以,我們該如何避免這種情況發生呢?

我們可以稍稍改造一下Cup構造函數:

function Cup(cupCover, cupBody, cupBottom) {
    if(this instanceof Cup) {
        this.cupCover = cupCover
        this.cupBody = cupBody
        this.cupBottom = cupBottom
    }
    else {
        return new Cup()
    }
}
複製代碼

這樣當我們再次不小心執行let cup = Cup(‘iron’, ‘plastic’, ‘rubber’)時,由於此時的this並不是Cup的派生類,所以我們直接返回一個實例。

let cup = Cup('iron', 'plastic', 'rubber')
cup.cupCover // "iron"
複製代碼

而這種形式的構造函數,就是今天要說的安全模式的構造函數。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/221634.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 13:12
下一篇 2024-12-09 13:12

相關推薦

發表回復

登錄後才能評論