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