JavaScript:new 一個(gè)函數(shù)和直接調(diào)用函數(shù)的區(qū)別分析
function Test() {
this.name = 'Test';
return function() { return true; }
}
var test = new Test(); // 這里的 test 是什么?
是一個(gè) Test 對(duì)象嗎?錯(cuò)!這里 test 是一個(gè)函數(shù)——Test 中返回的 function() { return true; }。這時(shí),new Test() 等效于 Test(),注意,是等效于,不是等于,如果使用new Test() == Test() 判定兩者是否相等,則會(huì)返回 false,因?yàn)?Javascript 對(duì)于 Object 和 Function 的比較是基于引用的。
為了更清晰的分辨在上述情形下兩者間的區(qū)別,請(qǐng)繼續(xù)看以下代碼:
function Test() {
this.name = 'Test';
return 'Test';
}
var fnT = Test();
var newT = new Test();
顯然,fnT 是字符串 Test,那 newT 呢?呵呵,是不是被第一個(gè)樣例迷惑了?其實(shí),此時(shí) newT 是一個(gè) Test 對(duì)象——有一個(gè)名為 name 的屬性,其值為字符串 Test。
通過(guò)上面兩段代碼,我們可以得出一個(gè)猜測(cè),如果函數(shù)返回值為常規(guī)意義上的值類型(Number、String、Boolean)時(shí),new 函數(shù)將會(huì)返回一個(gè)該函數(shù)的實(shí)例對(duì)象,而如果函數(shù)返回一個(gè)引用類型(Object、Array、Function),則 new 函數(shù)與直接調(diào)用函數(shù)產(chǎn)生的結(jié)果等同。通過(guò)在 Test 函數(shù)中返回不同類型的值進(jìn)行測(cè)試,可以證實(shí)這一點(diǎn)。
分清這一點(diǎn),其實(shí)還是蠻重要的,至少在看一些面向?qū)ο蟮目蚣茴悗?kù)代碼時(shí),會(huì)少一些疑惑。
- JavaScript函數(shù)的4種調(diào)用方法實(shí)例分析
- JavaScript 函數(shù)的定義-調(diào)用、注意事項(xiàng)
- 深入學(xué)習(xí) JavaScript中的函數(shù)調(diào)用
- 淺談js函數(shù)三種定義方式 & 四種調(diào)用方式 & 調(diào)用順序
- javascript函數(shù)的四種調(diào)用模式
- Javascript 函數(shù)的四種調(diào)用模式
- 深入理解JavaScript中的尾調(diào)用(Tail Call)
- javascript使用call調(diào)用微信API
- 基于JavaScript實(shí)現(xiàn)繼承機(jī)制之調(diào)用call()與apply()的方法詳解
- javaScript call 函數(shù)的用法說(shuō)明
- JavaScript中的apply和call函數(shù)詳解
- JavaScript直接調(diào)用函數(shù)與call調(diào)用的區(qū)別實(shí)例分析
相關(guān)文章
微信小程序自定義組件的實(shí)現(xiàn)方法及自定義組件與頁(yè)面間的數(shù)據(jù)傳遞問(wèn)題
這篇文章主要介紹了微信小程序自定義組件的實(shí)現(xiàn)方法及自定義組件與頁(yè)面間的數(shù)據(jù)傳遞 ,需要的朋友可以參考下2018-10-10js 提交form表單和設(shè)置form表單請(qǐng)求路徑的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇js 提交form表單和設(shè)置form表單請(qǐng)求路徑的實(shí)現(xiàn)方法。2016-10-10JavaScript中訪問(wèn)id對(duì)象 屬性的方式訪問(wèn)屬性(實(shí)例代碼)
下面小編就為大家?guī)?lái)一篇JavaScript中訪問(wèn)id對(duì)象 屬性的方式訪問(wèn)屬性(實(shí)例代碼)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10原生javascript的ajax請(qǐng)求及后臺(tái)PHP響應(yīng)操作示例
這篇文章主要介紹了原生javascript的ajax請(qǐng)求及后臺(tái)PHP響應(yīng)操作,結(jié)合示例形式分析了JavaScript前臺(tái)ajax請(qǐng)求的原理、調(diào)用、后臺(tái)PHP響應(yīng)請(qǐng)求及cookie保存相關(guān)操作技巧,需要的朋友可以參考下2020-02-02JavaScript中arguments.callee屬性的作用與替換方案
這篇文章介紹了JavaScript中arguments.callee屬性的作用與替換方案,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06在layui.use 中自定義 function 的正確方法
今天小編就為大家分享一篇在layui.use 中自定義 function 的正確方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09javascript搜索框效果實(shí)現(xiàn)方法
這篇文章主要介紹了javascript搜索框效果實(shí)現(xiàn)方法,可實(shí)現(xiàn)顯示默認(rèn)提示文字的搜索框效果,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-05-05