JS中的構(gòu)造函數(shù)詳細(xì)解析
在JavaScript中,任何合法的函數(shù)都可以作為對(duì)象的構(gòu)造函數(shù),這既包括系統(tǒng)內(nèi)置函數(shù),也包括用戶自己定義的函數(shù)。一旦函數(shù)被作為構(gòu)造函數(shù)執(zhí)行,它內(nèi)部的this屬性將引用函數(shù)本身。
通常來(lái)說(shuō),構(gòu)造函數(shù)沒(méi)有返回值,它們只是初始化由this指針傳遞進(jìn)來(lái)的對(duì)象,并且什么也不返回。如果一個(gè)函數(shù)有返回值,被返回的對(duì)象就成了new表達(dá)式的值。從形式上看,一個(gè)函數(shù)被作為構(gòu)造函數(shù)還是普通函數(shù)執(zhí)行的唯一區(qū)別,是否用new運(yùn)算符。
上面的描述事實(shí)上有著更為精確的含義,這要把函數(shù)如果有返回值的情況分為函數(shù)的返回值是引用類(lèi)型和值類(lèi)型兩種情況。
如果一個(gè)函數(shù)的返回值是引用類(lèi)型(數(shù)組,對(duì)象或者函數(shù))的數(shù)據(jù),那么這個(gè)函數(shù)作為構(gòu)造函數(shù)用new運(yùn)算符執(zhí)行構(gòu)造時(shí),運(yùn)算的結(jié)果將被它的返回值取代,這時(shí)候,構(gòu)造函數(shù)體內(nèi)的this值丟失了,取而代之的是被返回的對(duì)象。例如:
function test()
{
this.a=10;
return function()
{
return 1;
}
}
alert m=new test();
var n=test();
alert(m);//返回return后面的閉包
alert(n);//返回return 后面的閉包
運(yùn)行結(jié)果m的值和n的值是一樣的,都是test函數(shù)返回的閉包,而this引用的對(duì)象和this.a=10的賦值結(jié)果全部被丟棄。
如果一個(gè)函數(shù)的返回值是一個(gè)值類(lèi)型,那么這個(gè)函數(shù)作為構(gòu)造函數(shù)用new運(yùn)算符執(zhí)行構(gòu)造時(shí),它的返回值將被丟棄。new 表達(dá)式的結(jié)果仍然是this所引用的對(duì)象。
function test()
{
this.a=10;
return 1;
}
alert m=new test();
var n=test();
alert(m)//返回【Object】
alert(n)//返回1.
- JS創(chuàng)建類(lèi)和對(duì)象的兩種不同方式
- 跟我學(xué)習(xí)javascript創(chuàng)建對(duì)象(類(lèi))的8種方法
- JavaScript 創(chuàng)建對(duì)象和構(gòu)造類(lèi)實(shí)現(xiàn)代碼
- JavaScript 常見(jiàn)對(duì)象類(lèi)創(chuàng)建代碼與優(yōu)缺點(diǎn)分析
- JS OOP包機(jī)制,類(lèi)創(chuàng)建的方法定義
- JavaScript創(chuàng)建類(lèi)/對(duì)象的幾種方式概述及實(shí)例
- 創(chuàng)建js對(duì)象和js類(lèi)的方法匯總
- Javascript創(chuàng)建類(lèi)和對(duì)象詳解
- JavaScript構(gòu)造函數(shù)詳解
- JS面向?qū)ο蠡A(chǔ)講解(工廠模式、構(gòu)造函數(shù)模式、原型模式、混合模式、動(dòng)態(tài)原型模式)
- 深入理解javascript構(gòu)造函數(shù)和原型對(duì)象
- JavaScript 面向?qū)ο蟪绦蛟O(shè)計(jì)詳解【類(lèi)的創(chuàng)建、實(shí)例對(duì)象、構(gòu)造函數(shù)、原型等】
相關(guān)文章
微信小程序?qū)崿F(xiàn)單選選項(xiàng)卡切換效果
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)單選選項(xiàng)卡切換效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02GWT中復(fù)制到剪貼板 js+flash實(shí)現(xiàn)復(fù)制 兼容性比較好
今天看到有個(gè)Google Code的項(xiàng)目,叫ZeroClipboard,大意是使用flash作為媒介,將內(nèi)容復(fù)制到剪貼板。這比用純javascript好,因?yàn)椴煌瑸g覽器會(huì)出于安全的原因,有不同反應(yīng),例如IE會(huì)給出提示,有的瀏覽器不支持復(fù)制到剪貼板。2010-03-03ckeditor一鍵排版功能實(shí)現(xiàn)方法分析
這篇文章主要介紹了ckeditor一鍵排版功能實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了ckeditor一鍵排版相關(guān)擴(kuò)展插件定義、配置與使用方法,需要的朋友可以參考下2020-02-02Js實(shí)現(xiàn)雙擊鼠標(biāo)自動(dòng)滾動(dòng)屏幕的示例代碼
這篇文章主要介紹了Js實(shí)現(xiàn)雙擊鼠標(biāo)自動(dòng)滾動(dòng)屏幕的示例代碼。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-12-12關(guān)于JavaScript中forEach和each用法淺析
這篇文章主要給大家介紹了關(guān)于JavaScript中forEach和each使用方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2017-07-07js判斷運(yùn)行jsp頁(yè)面的瀏覽器類(lèi)型以及版本示例
做了一個(gè)判斷瀏覽器類(lèi)型和版本號(hào)的業(yè)務(wù),記錄下相關(guān)的js代碼,個(gè)人感覺(jué)還不錯(cuò),需要的朋友可以參考下2013-10-10前端如何實(shí)現(xiàn)動(dòng)畫(huà)過(guò)渡效果
這篇文章主要介紹了前端如何實(shí)現(xiàn)動(dòng)畫(huà)過(guò)渡效果,幫助大家更好的理解和學(xué)習(xí)前端開(kāi)發(fā)網(wǎng)頁(yè),感興趣的朋友可以了解下2021-02-02