摘要:函數(shù)實(shí)際上是對(duì)象每個(gè)函數(shù)都是類(lèi)型的實(shí)例且與其他類(lèi)型一樣具有屬性和方法由于函數(shù)是對(duì)象故函數(shù)名即為指向函數(shù)的指針正是由于這一點(diǎn)函數(shù)沒(méi)有重載重復(fù)定義函數(shù)只會(huì)后者替換前者函數(shù)的定義函數(shù)的定義有三種函數(shù)聲明函數(shù)表達(dá)式使用構(gòu)造函數(shù)不推薦使用注函數(shù)聲明和
函數(shù)實(shí)際上是對(duì)象,每個(gè)函數(shù)都是Function類(lèi)型的實(shí)例,且與其他類(lèi)型一樣具有屬性和方法.由于函數(shù)是對(duì)象,故函數(shù)名即為指向函數(shù)的指針,正是由于這一點(diǎn),函數(shù)沒(méi)有重載,重復(fù)定義函數(shù)只會(huì)后者替換前者.
函數(shù)的定義函數(shù)的定義有三種:
函數(shù)聲明
function sum(num1,num2){ return num1+num2; }
函數(shù)表達(dá)式
var sum=function(sum1,sum2){ return sum1+sum2; }
使用Function構(gòu)造函數(shù)(不推薦使用)
var sum=new Function("num1","num2","return num1 + num2;");
注:函數(shù)聲明和函數(shù)表達(dá)式的唯一區(qū)別是函數(shù)聲明會(huì)提前.意即函數(shù)調(diào)用在函數(shù)聲明之前可以正常運(yùn)行.
作為值的函數(shù)前面提到函數(shù)是對(duì)象,所以函數(shù)也可以作為參數(shù)值或返回值.
//作為參數(shù) function callSomeFunction(someFunction,someArgument){ reuturn someFunction(someArgument); } function add10(num){ return num+10; } var result=callSomeFunction(add10,10); alert(result); //20 //作為返回值 function createCompareFunction(propertyName){ return function(object1,object2){ var value1 = object1[propertyName]; var value2 = object2[propertyName]; if(value1 < value2){ return -1; } else if(value1 > value2){ return 1; } else{ return 0; } } }函數(shù)內(nèi)部屬性
在函數(shù)內(nèi)部有兩個(gè)特殊對(duì)象:arguments this
arguments是一個(gè)類(lèi)數(shù)組對(duì)象,包含傳入函數(shù)中的所有參數(shù)(這是其主要用途),除此之外,其還有一個(gè)callee的屬性,該屬性是一個(gè)指針,指向當(dāng)前函數(shù)對(duì)象.
this引用的是函數(shù)據(jù)以執(zhí)行的環(huán)境對(duì)象.在調(diào)用函數(shù)之前,this的值是不確定的,當(dāng)在全局對(duì)象中調(diào)用函數(shù)時(shí),this引用的是全局對(duì)象window,當(dāng)把函數(shù)賦值給某對(duì)象時(shí),this指的是此對(duì)象.
window.color = "red"; function sayColor(){ alert(color); } sayColor(); //red var o={color:"blue"}; o.sayColor = sayColor; o.sayColor();//blue函數(shù)的屬性和方法
屬性
length:函數(shù)希望接收的命名參數(shù)的個(gè)數(shù).
prototype:這是一個(gè)非常耐人尋味的屬性,它保存著函數(shù)的實(shí)例方法,意即到通過(guò)函數(shù)實(shí)例化得到的對(duì)象可以訪(fǎng)問(wèn)prototype中的方法.此屬性在自定義引用類(lèi)型和實(shí)現(xiàn)繼承很有用處.
方法
apply call這兩個(gè)方法是函數(shù)的非繼承方法.用途都是設(shè)置函數(shù)體內(nèi)this對(duì)象的值.
apply接收兩個(gè)參數(shù),第一個(gè)是運(yùn)行函數(shù)的作用域,通俗的說(shuō)就是將這個(gè)參數(shù)作為this指向的值.第二個(gè)參數(shù)是數(shù)組作為執(zhí)行函數(shù)的參數(shù).
function sum(num1,num2){ return num1+num2; } function callSum(num1,num2){ return sum.apply(this,arguments); } alert(callSum(10,10)); //20
call接收的第一個(gè)參數(shù)也是運(yùn)行函數(shù)的作用域,后面的參數(shù)也是傳遞給執(zhí)行函數(shù)的參數(shù),與apply不同的是,后面的參數(shù)并非數(shù)組,而是逐個(gè)列舉出來(lái)的.
function sum(sum1,sum2){ return sum1+sum2; } function callSum(num1,num2){ return sum.call(this,num1,num2); } alert(callSum(10,10)); //20構(gòu)造函數(shù)
ECMAScript中的構(gòu)造函數(shù)可以創(chuàng)建特定類(lèi)型的對(duì)象.內(nèi)置的構(gòu)造函數(shù)(例如Array Object)會(huì)自動(dòng)出現(xiàn)在執(zhí)行環(huán)境中.構(gòu)造函數(shù)的首字母應(yīng)該以大寫(xiě)字母開(kāi)頭,從而區(qū)分非構(gòu)造函數(shù).
要?jiǎng)?chuàng)建新的實(shí)例,必須使用new操作符,穿件新的實(shí)例會(huì)經(jīng)歷以下四個(gè)步驟:
創(chuàng)建一個(gè)新對(duì)象
將構(gòu)造函數(shù)的作用域賦值給新對(duì)象(因此this指向這個(gè)新對(duì)象);
指向構(gòu)造函數(shù)中的代碼.
返回新對(duì)象
function Person(name,age,job){ this.name = name; this.age = age; this.job = job; this.sayName = function(){ alert(this.name); }; } var person=new Person("Mr pu",24,"web developer");
構(gòu)造函數(shù)與普通函數(shù)的區(qū)別在于構(gòu)造函數(shù)在實(shí)例化時(shí)加了new關(guān)鍵字.其它地方完全一樣.
重要提示 在通過(guò)構(gòu)造函數(shù)實(shí)例化對(duì)象時(shí),請(qǐng)勿把方法放在構(gòu)造函數(shù)中,因?yàn)槊總€(gè)函數(shù)(在這里指方法方法)都是對(duì)象,每次實(shí)例化一個(gè)對(duì)象時(shí)這個(gè)對(duì)象中會(huì)保存每一構(gòu)造函數(shù)中的方法,這是很影響性能的.解決辦法是把這些方法放在prototype屬性中.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/85994.html
摘要:深入之繼承的多種方式和優(yōu)缺點(diǎn)深入系列第十五篇,講解各種繼承方式和優(yōu)缺點(diǎn)。對(duì)于解釋型語(yǔ)言例如來(lái)說(shuō),通過(guò)詞法分析語(yǔ)法分析語(yǔ)法樹(shù),就可以開(kāi)始解釋執(zhí)行了。 JavaScript深入之繼承的多種方式和優(yōu)缺點(diǎn) JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 寫(xiě)在前面 本文講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 但是注意: 這篇文章更像是筆記,哎,再讓我...
摘要:要理解立即執(zhí)行函數(shù),需要先理解一些函數(shù)的基本概念。函數(shù)表達(dá)式使用關(guān)鍵字聲明一個(gè)函數(shù),但未給函數(shù)命名,最后將匿名函數(shù)賦予一個(gè)變量,叫函數(shù)表達(dá)式,這是最常見(jiàn)的函數(shù)表達(dá)式語(yǔ)法形式。 javascript和其他編程語(yǔ)言相比比較隨意,所以javascript代碼中充滿(mǎn)各種奇葩的寫(xiě)法,有時(shí)霧里看花,當(dāng)然,能理解各型各色的寫(xiě)法也是對(duì)javascript語(yǔ)言特性更進(jìn)一步的深入理解。 ( functio...
摘要:使用上一篇文章的例子來(lái)說(shuō)明下自由變量進(jìn)階期深入淺出圖解作用域鏈和閉包訪(fǎng)問(wèn)外部的今天是今天是其中既不是參數(shù),也不是局部變量,所以是自由變量。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo)) 本周正式開(kāi)始前端進(jìn)階的第二期,本周的主題是作用域閉包,今天是第7天。 本計(jì)劃一共28期,每期重點(diǎn)攻克一個(gè)面試重難點(diǎn),如果你還不了解本進(jìn)階計(jì)...
摘要:的翻譯文檔由的維護(hù)很多人說(shuō),阮老師已經(jīng)有一本關(guān)于的書(shū)了入門(mén),覺(jué)得看看這本書(shū)就足夠了。前端的異步解決方案之和異步編程模式在前端開(kāi)發(fā)過(guò)程中,顯得越來(lái)越重要。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(shū)(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書(shū)的目的是以目前還在制定中的ECMASc...
摘要:理解的函數(shù)基礎(chǔ)要搞好深入淺出原型使用原型模型,雖然這經(jīng)常被當(dāng)作缺點(diǎn)提及,但是只要善于運(yùn)用,其實(shí)基于原型的繼承模型比傳統(tǒng)的類(lèi)繼承還要強(qiáng)大。中文指南基本操作指南二繼續(xù)熟悉的幾對(duì)方法,包括,,。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。 怎樣使用 this 因?yàn)楸救藢儆趥吻岸?,因此文中只看懂?8 成左右,希望能夠給大家?guī)?lái)幫助....(據(jù)說(shuō)是阿里的前端妹子寫(xiě)的) this 的值到底...
摘要:理解作用域高級(jí)程序設(shè)計(jì)中有說(shuō)到對(duì)象是在運(yùn)行時(shí)基于函數(shù)的執(zhí)行環(huán)境綁定的在全局函數(shù)中,等于,而當(dāng)函數(shù)被作為某個(gè)對(duì)象調(diào)用時(shí),等于那個(gè)對(duì)象。指向與匿名函數(shù)沒(méi)有關(guān)系如果函數(shù)獨(dú)立調(diào)用,那么該函數(shù)內(nèi)部的,則指向。 理解this作用域 《javascript高級(jí)程序設(shè)計(jì)》中有說(shuō)到: this對(duì)象是在運(yùn)行時(shí)基于函數(shù)的執(zhí)行環(huán)境綁定的:在全局函數(shù)中,this等于window,而當(dāng)函數(shù)被作為某個(gè)對(duì)象調(diào)用時(shí),t...
閱讀 2055·2021-11-15 11:39
閱讀 3237·2021-10-09 09:41
閱讀 1501·2019-08-30 14:20
閱讀 3274·2019-08-30 13:53
閱讀 3334·2019-08-29 16:32
閱讀 3395·2019-08-29 11:20
閱讀 3032·2019-08-26 13:53
閱讀 783·2019-08-26 12:18