javascript 面向?qū)ο骹unction詳解及實(shí)例代碼
javascript 面向?qū)ο骹unction詳解
js中的函數(shù)有三種表示方式:
//函數(shù)的第一種表示方式:函數(shù)關(guān)鍵字的方式 function f1() { alert("f1"); } //函數(shù)的第二種表示方式:函數(shù)字面量的方式 var f2 = function() { alert("f2"); } //函數(shù)的第三種表示方式:構(gòu)造函數(shù)的方式 var f3 = new Function('var a = 100; b = 200; return a+b;'); alert(f3());
函數(shù)的定義方式一般有以上三種,前兩種方式基本沒(méi)什么區(qū)別,第三種定義方式(Function()構(gòu)造函數(shù))每次執(zhí)行時(shí)都解析函數(shù)主體,并創(chuàng)建一個(gè)新的函數(shù)對(duì)象。所以當(dāng)在一個(gè)循環(huán)或者頻繁執(zhí)行的函數(shù)中調(diào)用Function()構(gòu)造函數(shù)的效率是非常低的。相反,函數(shù)字面量卻不是每次遇到都重新編譯的。一般不會(huì)采用第三種方式。
另外,分別執(zhí)行alert(f1.constructor); alert(f2.constructor); alert(f3.constructor);都會(huì)出現(xiàn)同樣的效果,如下:
f1.constructor,f2.constructor,f3.constructor都是一個(gè)對(duì)象,為Function,這里可以這樣理解,這三個(gè)函數(shù)f1,f2,f3都是通過(guò)Function的形式產(chǎn)生的,所以他們的構(gòu)造器就是Function,由此也可以推出這三種函數(shù)的產(chǎn)生方式其實(shí)內(nèi)部原理是一樣的。
在JavaScript中,每個(gè)具有原型的對(duì)象都會(huì)自動(dòng)獲得constructor屬性。對(duì)象的constructor屬性用于返回創(chuàng)建該對(duì)象的函數(shù),也就是我們常說(shuō)的構(gòu)造函數(shù)。實(shí)際上,在js中,每一個(gè)function都是一個(gè)Function Object。
總結(jié):
1、在js中一切皆對(duì)象;
2、在js中對(duì)象有一個(gè)屬性為constructor;
3、在js中,凡是函數(shù)都是構(gòu)造器對(duì)象
另外,從面向?qū)ο蟮慕嵌葋?lái)理解,上面實(shí)例中f1是一個(gè)函數(shù),同時(shí)它也是一個(gè)對(duì)象,constructor可以理解為它的一個(gè)屬性,并且這里可以利用該對(duì)象的constructor屬性找到它的構(gòu)造函數(shù)。
可以為f1這個(gè)對(duì)象動(dòng)態(tài)的添加屬性:
//給f1對(duì)象添加一個(gè)屬性為b,值為5 f1.b = 5; alert(f1.b); //給f1對(duì)象添加一個(gè)屬性為bb,bb為對(duì)象,值為var f2 = function() { alert("f2");} f1.bb = f2; alert(f1.bb);
在js中,任何一個(gè)對(duì)象都有可能成為另一個(gè)對(duì)象的屬性。
一個(gè)對(duì)象可以動(dòng)態(tài)的添加任何一個(gè)屬性,但是這個(gè)對(duì)象必須有值,不能是null和undefined。
function Person() { //do something } function P() { //do something } function A() { //do something } function B() { //do something } Person.a = P; Person.a.b = A; Person.a.b.c = B; Person.a.b.c.d = f2; alert(Person.a.b.c.d); //正確,因?yàn)镻erson.a.b.c是有值的 alert(Person.a.b.c.d.e.f); //錯(cuò)誤,不能為Person.a.b.c.d.e增加屬性f,因?yàn)镻erson.a.b.c.d.e是undefined
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- JavaScript求一組數(shù)的最小公倍數(shù)和最大公約數(shù)常用算法詳解【面向?qū)ο?,回歸迭代和循環(huán)】
- JS 面向?qū)ο笾^承---多種組合繼承詳解
- JS面向?qū)ο缶幊淘斀?/a>
- 詳解JS面向?qū)ο缶幊?/a>
- 詳解JavaScript基于面向?qū)ο笾^承實(shí)例
- 詳解JavaScript基于面向?qū)ο笾^承
- 詳解JavaScript基于面向?qū)ο笾畡?chuàng)建對(duì)象(2)
- 詳解JavaScript基于面向?qū)ο笾畡?chuàng)建對(duì)象(1)
- js面向?qū)ο笾小⑺接?、靜態(tài)屬性和方法詳解
- JS Pro-深入面向?qū)ο蟮某绦蛟O(shè)計(jì)之繼承的詳解
- JAVASCRIPT THIS詳解 面向?qū)ο?/a>
- JS面向?qū)ο蟮某绦蛟O(shè)計(jì)相關(guān)知識(shí)小結(jié)
- JavaScript面向?qū)ο蟮某绦蛟O(shè)計(jì)(犯迷糊的小羊)
相關(guān)文章
uni-app中使用手機(jī)號(hào)一鍵登錄的詳細(xì)圖文教程
最近剛接觸了uni-app,用于開(kāi)發(fā)微信小程序,設(shè)計(jì)到了微信授權(quán)登錄,下面這篇文章主要給大家介紹了關(guān)于uni-app中使用手機(jī)號(hào)一鍵登錄的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01父頁(yè)面iframe中的第三方子頁(yè)面跨域交互技術(shù)—postMessage實(shí)現(xiàn)方法
web網(wǎng)站通過(guò)iframe嵌入第三方web頁(yè)面,父頁(yè)面和子頁(yè)面如果需要數(shù)據(jù)交互,顯然違反了同源策略,在HTML5標(biāo)準(zhǔn)引入的window對(duì)象下的postMessage方法,可以允許來(lái)自不同源的JavaScript腳本采用異步方式進(jìn)行有限的通信,可以實(shí)現(xiàn)跨文本檔、多窗口、跨域消息傳遞...2023-06-06Summernote實(shí)現(xiàn)圖片上傳功能的簡(jiǎn)單方法
下面小編就為大家?guī)?lái)一篇Summernote實(shí)現(xiàn)圖片上傳功能的簡(jiǎn)單方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07uniapp手寫(xiě)滾動(dòng)選擇器的完整代碼(時(shí)間選擇器)
這篇文章主要介紹了uniapp手寫(xiě)滾動(dòng)選擇器的完整代碼(時(shí)間選擇器),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-07-07前端使用axios實(shí)現(xiàn)下載文件功能的詳細(xì)過(guò)程
項(xiàng)目中經(jīng)常會(huì)遇到需要導(dǎo)出列表內(nèi)容,或者下載文件之類(lèi)的需求,下面這篇文章主要給大家介紹了關(guān)于前端使用axios實(shí)現(xiàn)下載文件功能的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08JavaScript重復(fù)元素處理方法分析【統(tǒng)計(jì)個(gè)數(shù)、計(jì)算、去重復(fù)等】
這篇文章主要介紹了JavaScript重復(fù)元素處理方法,結(jié)合實(shí)例形式分析了javascript針對(duì)字符串、數(shù)組中重復(fù)元素的個(gè)數(shù)統(tǒng)計(jì),計(jì)算及去重復(fù)等相關(guān)操作技巧,需要的朋友可以參考下2017-12-12jscript之Open an Excel Spreadsheet
jscript之Open an Excel Spreadsheet...2007-06-06