真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Javascript中構(gòu)造函數(shù)要注意的一些坑

前言

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比東區(qū)網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式東區(qū)網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋東區(qū)地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。

最近在家看書:《你不知道的Javascript》,看到構(gòu)造函數(shù)調(diào)用時(shí)會(huì)綁定this,就順便打開控制臺(tái)輸了一些代碼,詳細(xì)測(cè)試了一下。

構(gòu)造函數(shù)簡(jiǎn)單的講,即定義出來專供new 式調(diào)用的函數(shù)。

如:

function A(b) {
 this.b = b || 'bbb';
}

然后你就可以通過new ,來構(gòu)建一個(gè) A 的實(shí)例:

var a = new A('B')

但是,一個(gè)首要的坑是,構(gòu)造函數(shù)與一個(gè)普通函數(shù)并無不同,如果你故意不使用new,或忘記用new,都會(huì)得到奇怪的錯(cuò)誤:

var aa = A('adadada');

這樣調(diào)用,并不會(huì)顯式地報(bào)錯(cuò),但實(shí)際上隱患深埋:

  1. aa并不是A的實(shí)例,而變成了 undefined
  2. 多了一個(gè)名為 b 的全局變量,值是 ‘a(chǎn)dadada'

這就是無new 調(diào)用構(gòu)造函數(shù)的坑。

下面說其他的:

構(gòu)造函數(shù)自身有返回值

比如:

function A(b) {
 this.b = b || 'bbb';
 return {b: '0000'};
}

這個(gè)時(shí)候,無論是否使用new來調(diào)用A,得到的結(jié)果都會(huì)相同,即得到一個(gè)普通對(duì)象:{b:'0000′}

當(dāng)然,此時(shí)是否帶 new 調(diào)用,還是有一個(gè)不同點(diǎn)的,即:不帶new時(shí),依然會(huì)莫名聲明一個(gè) 叫 b 的全局變量。

既然,構(gòu)造函數(shù)有顯式返回值時(shí),會(huì)代替默認(rèn)應(yīng)該返回的this,成為返回值,那么,是不是所有返回值都能覆蓋this呢?

測(cè)試顯式返回值

眾所周知,函數(shù)都是有返回值的,只是如果沒有 return,則會(huì)返回undefined.

那么,我就在構(gòu)造函數(shù)里顯式返回一個(gè)undefined,會(huì)怎么樣?

var a = function (){this.b = 'b'; return undefined};
new a(); // {b:'b'}

顯式返回一個(gè) undefined ,并不能阻止構(gòu)造函數(shù)式調(diào)用的默認(rèn)行為。

下圖是更多測(cè)試:

Javascript中構(gòu)造函數(shù)要注意的一些坑

簡(jiǎn)單的總結(jié):

顯式的返回以下值:undefined, null, boolean, number等基礎(chǔ)類型,并不會(huì)代替 new 式調(diào)用的默認(rèn)行為。

但顯式返回以下值:{},[],RegExp, Date, Function,均會(huì)代替 new 調(diào)用的默認(rèn)返回值 this.

大家都看到了,后者,全都是 對(duì)象,是復(fù)雜類型。

隨手一記

前面說過,本該進(jìn)行 new 式調(diào)用的構(gòu)造函數(shù),被當(dāng)作普通函數(shù)調(diào)用,那么,如果函數(shù)體中,有 this.x = xxx 這樣的賦值語句,則會(huì)被賦值給全局對(duì)象(即 windows),從而變成一個(gè)全局變量。

原因相信大家都知道,而本書中也專門講過:函數(shù)調(diào)用時(shí),默認(rèn)的this就是綁定至全局對(duì)象。

而本書還提到:如果函數(shù)體是嚴(yán)格模式,則不會(huì)綁定 this 至全局對(duì)象,如:

var a = function (){'use strict';this.b = 'b'; return /111/g};
a(); // 直接報(bào)錯(cuò)

因?yàn)閲?yán)格模式下,默認(rèn)的 this 指向 undefined

所以說,有兩點(diǎn)要提一下:

  1. 嚴(yán)格模式真不錯(cuò)
  2. 如果你想聲明一個(gè)構(gòu)造函數(shù),那么嚴(yán)格模式是非常必要的

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。


文章標(biāo)題:Javascript中構(gòu)造函數(shù)要注意的一些坑
轉(zhuǎn)載源于:http://weahome.cn/article/phohhh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部