JS中的構(gòu)造函數(shù)詳細(xì)解析
在JavaScript中,任何合法的函數(shù)都可以作為對象的構(gòu)造函數(shù),這既包括系統(tǒng)內(nèi)置函數(shù),也包括用戶自己定義的函數(shù)。一旦函數(shù)被作為構(gòu)造函數(shù)執(zhí)行,它內(nèi)部的this屬性將引用函數(shù)本身。
通常來說,構(gòu)造函數(shù)沒有返回值,它們只是初始化由this指針傳遞進(jìn)來的對象,并且什么也不返回。如果一個函數(shù)有返回值,被返回的對象就成了new表達(dá)式的值。從形式上看,一個函數(shù)被作為構(gòu)造函數(shù)還是普通函數(shù)執(zhí)行的唯一區(qū)別,是否用new運(yùn)算符。
上面的描述事實上有著更為精確的含義,這要把函數(shù)如果有返回值的情況分為函數(shù)的返回值是引用類型和值類型兩種情況。
如果一個函數(shù)的返回值是引用類型(數(shù)組,對象或者函數(shù))的數(shù)據(jù),那么這個函數(shù)作為構(gòu)造函數(shù)用new運(yùn)算符執(zhí)行構(gòu)造時,運(yùn)算的結(jié)果將被它的返回值取代,這時候,構(gòu)造函數(shù)體內(nèi)的this值丟失了,取而代之的是被返回的對象。例如:
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引用的對象和this.a=10的賦值結(jié)果全部被丟棄。
如果一個函數(shù)的返回值是一個值類型,那么這個函數(shù)作為構(gòu)造函數(shù)用new運(yùn)算符執(zhí)行構(gòu)造時,它的返回值將被丟棄。new 表達(dá)式的結(jié)果仍然是this所引用的對象。
function test()
{
this.a=10;
return 1;
}
alert m=new test();
var n=test();
alert(m)//返回【Object】
alert(n)//返回1.
- JS創(chuàng)建類和對象的兩種不同方式
- 跟我學(xué)習(xí)javascript創(chuàng)建對象(類)的8種方法
- JavaScript 創(chuàng)建對象和構(gòu)造類實現(xiàn)代碼
- JavaScript 常見對象類創(chuàng)建代碼與優(yōu)缺點(diǎn)分析
- JS OOP包機(jī)制,類創(chuàng)建的方法定義
- JavaScript創(chuàng)建類/對象的幾種方式概述及實例
- 創(chuàng)建js對象和js類的方法匯總
- Javascript創(chuàng)建類和對象詳解
- JavaScript構(gòu)造函數(shù)詳解
- JS面向?qū)ο蠡A(chǔ)講解(工廠模式、構(gòu)造函數(shù)模式、原型模式、混合模式、動態(tài)原型模式)
- 深入理解javascript構(gòu)造函數(shù)和原型對象
- JavaScript 面向?qū)ο蟪绦蛟O(shè)計詳解【類的創(chuàng)建、實例對象、構(gòu)造函數(shù)、原型等】
相關(guān)文章
JavaScript Event學(xué)習(xí)第五章 高級事件注冊模型
在這一章我會講解兩種高級時間注冊模型:W3C和微軟的。因為這兩個方法都不能跨瀏覽器,所以在現(xiàn)在看來他們的使用場合并不多。2010-02-02
web項目開發(fā)之JS函數(shù)防抖與節(jié)流示例代碼
這篇文章主要介紹了web項目開發(fā)之JS函數(shù)防抖與節(jié)流實現(xiàn)的示例代碼及原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09
JS實現(xiàn)利用閉包判斷Dom元素和滾動條的方向示例
這篇文章主要介紹了JS實現(xiàn)利用閉包判斷Dom元素和滾動條的方向,涉及javascript閉包、事件響應(yīng)及頁面元素屬性動態(tài)操作相關(guān)使用技巧,需要的朋友可以參考下2019-08-08
javascript trim 去空格函數(shù)實現(xiàn)代碼
去除字符串左右兩端的空格,在vbscript里面可以輕松地使用 trim、ltrim 或 rtrim,但在js中卻沒有這3個內(nèi)置方法,需要手工編寫。下面的實現(xiàn)方法是用到了正則表達(dá)式,效率不錯,并把這三個方法加入String對象的內(nèi)置方法中去。2008-10-10
JS代碼屏蔽F12,右鍵,粘貼,復(fù)制,剪切,選中,操作實例
在本篇文章里小編給大家分享的是關(guān)于利用JS代碼屏蔽F12,右鍵,粘貼,復(fù)制,剪切,選中,操作,需要的朋友們學(xué)習(xí)下。2019-09-09
基于JS實現(xiàn)小區(qū)樓的電梯運(yùn)行程序
本文介紹了如何使用JavaScript實現(xiàn)一個簡單的小區(qū)樓電梯運(yùn)行程序,用戶可以通過點(diǎn)擊樓層來選擇目標(biāo)樓層,并模擬電梯的上下行,文章還提示了如何擴(kuò)展該程序,例如添加更多樓層、優(yōu)化移動邏輯和添加動畫效果,感興趣的朋友一起看看吧2025-01-01
JavaScript仿淘寶頁面圖片滾動加載及刷新回頂部的方法解析
這篇文章主要介紹了JavaScript仿淘寶頁面圖片滾動加載及刷新回頂部的方法解析,包括懶加載和onbeforeunload等要點(diǎn)的理解,需要的朋友可以參考下2016-05-05

