国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

javascript創(chuàng)建構(gòu)造函數(shù)時(shí)作用域安全,即怎樣保證一直都是構(gòu)造函數(shù)

Shihira / 1018人閱讀

摘要:在使用利用面向?qū)ο蟮乃枷雱?chuàng)建類(lèi)和對(duì)象時(shí),通常是使用構(gòu)造函數(shù),工廠方式,原型方式,原型構(gòu)造函數(shù)方式等。

在使用javascript利用面向?qū)ο蟮乃枷雱?chuàng)建類(lèi)和對(duì)象時(shí),通常是使用構(gòu)造函數(shù),工廠方式,原型方式,原型構(gòu)造函數(shù)方式等。
構(gòu)造函數(shù)其實(shí)就是使用一個(gè)使用new操作符調(diào)用函數(shù),當(dāng)使用new調(diào)用時(shí),構(gòu)造函數(shù)內(nèi)用到的this對(duì)象會(huì)指向新創(chuàng)建的對(duì)象實(shí)例,例如:

function Person(name, age){
    this.name = name;
    this.age = age;
}

var p1 = new Person("summer", 28)

上述例子Person構(gòu)造函數(shù)使用this對(duì)象給兩個(gè)屬性賦值:name,age。當(dāng)使用new操作符新建一個(gè)變量p1,即創(chuàng)建了一個(gè)新的對(duì)象,同時(shí)this指向當(dāng)前的p1對(duì)象。
這是利用構(gòu)造函數(shù)創(chuàng)建對(duì)象的情況,當(dāng)不使用new操作符時(shí),將Person當(dāng)做普通函數(shù)調(diào)用,由于該this對(duì)象是在運(yùn)行時(shí)綁定的,所以直接調(diào)用Person(),這時(shí)this會(huì)映射到全局對(duì)象window上這時(shí)就污染了全局window對(duì)象,例如:

var p1 = Person("summer", 28);
console.log(window.age); //28
console.log(p1.age);//報(bào)錯(cuò)


發(fā)現(xiàn)原本針對(duì)Person實(shí)例的屬性被加到了全局window對(duì)象上,構(gòu)造函數(shù)作為普通函數(shù)調(diào)用,由于this對(duì)象的晚綁定造成的,這里this被解析成window對(duì)象,這樣污染了全局屬性window.name。
為了保證每次的構(gòu)造函數(shù)都創(chuàng)建一個(gè)對(duì)象,即不允許作為普通函數(shù)調(diào)用,解決方法是創(chuàng)建一個(gè)作用域安全的構(gòu)造函數(shù).

首先判斷this對(duì)象是正確的類(lèi)型實(shí)例,如果不是,那么就會(huì)創(chuàng)建新的實(shí)例并且返回該實(shí)例對(duì)象。

如下所示:

function Person(name, age){
    if(this instanceof Person){//判斷this是否指向Person
        this.name = name;
        this.age = age;
    }else{
        return new Person(name,age);//返回一個(gè)新的對(duì)象
    }
}

var p1 = Person("summer", 28);
console.log(window.name);//""
console.log(p1.name);//summer

如下所示:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/78842.html

相關(guān)文章

  • JavaScript-面試

    摘要:表示沒(méi)有對(duì)象,即該處不應(yīng)該有值。閉包的形成允許使用內(nèi)部函數(shù),可以將函數(shù)定義和函數(shù)表達(dá)式放在另一個(gè)函數(shù)的函數(shù)體內(nèi)。使用閉包可以減少全局環(huán)境的污染,也可用延續(xù)變量的生命。所以在閉包不用之后,將不使用的局部變量刪除,使其被回收。 1.javaScript的數(shù)據(jù)類(lèi)型有什么 Undefined、Null、Boolean、Number、String 2.檢測(cè)數(shù)據(jù)類(lèi)型有什么方法 typeof typ...

    fantix 評(píng)論0 收藏0
  • javascript高級(jí)程序設(shè)計(jì)》第六章 讀書(shū)筆記 之 javascript對(duì)象的幾種創(chuàng)建方式

    摘要:三種使用構(gòu)造函數(shù)創(chuàng)建對(duì)象的方法和的作用都是在某個(gè)特殊對(duì)象的作用域中調(diào)用函數(shù)。這種方式還支持向構(gòu)造函數(shù)傳遞參數(shù)。叫法上把函數(shù)叫做構(gòu)造函數(shù),其他無(wú)區(qū)別適用情境可以在特殊的情況下用來(lái)為對(duì)象創(chuàng)建構(gòu)造函數(shù)。 一、工廠模式 工廠模式:使用字面量和object構(gòu)造函數(shù)會(huì)有很多重復(fù)代碼,在此基礎(chǔ)上改進(jìn)showImg(https://segmentfault.com/img/bVbmKxb?w=456&...

    xiaotianyi 評(píng)論0 收藏0
  • 關(guān)于javascript 中的高級(jí)定時(shí)器的若干問(wèn)題

    摘要:閉包閉包是指有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域中的變量的函數(shù)當(dāng)某個(gè)函數(shù)被調(diào)用時(shí),會(huì)創(chuàng)建一個(gè)執(zhí)行環(huán)境及相應(yīng)的作用域鏈。要注意通過(guò)第句聲明的這個(gè)方法屬于構(gòu)造函數(shù)生成的對(duì)象,而不屬于構(gòu)造函數(shù)的變量對(duì)象,也就是說(shuō),并不存在于作用域鏈中。 看到評(píng)論里有仁兄建議我試試箭頭函數(shù),真是受寵若驚,本來(lái)寫(xiě)這篇文章也只是想記錄寫(xiě)要點(diǎn)給自己日后看的。今天早上看到一篇總結(jié)javascript中this的文章JavaScr...

    zr_hebo 評(píng)論0 收藏0
  • JavaScript閉包

    摘要:此時(shí)的作用域鏈包含了兩個(gè)對(duì)象的活動(dòng)對(duì)象和對(duì)象。閉包的應(yīng)用場(chǎng)景保護(hù)函數(shù)內(nèi)的變量安全。依然如前例,由于閉包,函數(shù)中的一直存在于內(nèi)存中,因此每次執(zhí)行,都會(huì)給自加。 引子 JS的閉包一直是很多人不理解,也是在使用過(guò)程中經(jīng)常出現(xiàn)問(wèn)題的地方。每次看文章都會(huì)有所了解閉包,但是,用起來(lái)還是不對(duì),而且錯(cuò)誤百出,其關(guān)鍵問(wèn)題還是出在對(duì)其不理解,不了解。此文章會(huì)不定期更新以及完善,希望在我學(xué)習(xí)的時(shí)候,讓大家也...

    Tony 評(píng)論0 收藏0
  • 前端基本功-常見(jiàn)概念(一)

    摘要:前端基本功常見(jiàn)概念一點(diǎn)這里前端基本功常見(jiàn)概念二點(diǎn)這里前端基本功常見(jiàn)概念三點(diǎn)這里什么是原型鏈當(dāng)一個(gè)引用類(lèi)型繼承另一個(gè)引用類(lèi)型的屬性和方法時(shí)候就會(huì)產(chǎn)生一個(gè)原型鏈。函數(shù)式編程是聲明式而不是命令式,并且應(yīng)用程序狀態(tài)通過(guò)純函數(shù)流轉(zhuǎn)。 前端基本功-常見(jiàn)概念(一) 點(diǎn)這里前端基本功-常見(jiàn)概念(二) 點(diǎn)這里前端基本功-常見(jiàn)概念(三) 點(diǎn)這里 1.什么是原型鏈 當(dāng)一個(gè)引用類(lèi)型繼承另一個(gè)引用類(lèi)型的屬性和方...

    bladefury 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Shihira

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<