ఇక్మాస్క్రిప్ట్ Function ఆబ్జెక్ట్ (క్లాస్)
- ముంది పేజీ arguments ఆబ్జెక్ట్
- తరువాతి పేజీ క్లోజర్ (closure)
ECMAScript ఫంక్షన్లు అసలుగా పూర్తిగా కార్యకారణ ఆబ్జెక్ట్లు అని ఉంటాయి.
Function ఆబ్జెక్ట్ (క్లాస్)
ECMAScriptలో అత్యంత ఆసక్తికరమైనది ఫంక్షన్లు పూర్తిగా కార్యకారణ ఆబ్జెక్ట్లు అని ఉంటుంది.
Function క్లాస్ అనేది డెవలపర్లు సృష్టించిన ఏ ఫంక్షన్ను కూడా ప్రతినిధీకరించవచ్చు.
Function క్లాస్ ద్వారా ఫంక్షన్ సృష్టించడానికి ఉపయోగించే సంకేతం ఈ కింద ఉంది:
var function_name = new function(arg1, arg2, ..., argN, function_body)
ఈ రీతిలో ప్రతి arg ఒక పారామిటర్, చివరి పారామిటర్ ఫంక్షన్ ప్రధానం (అనుసరించవలసిన కోడ్). ఈ పారామిట్లు స్ట్రింగ్లు అయివచ్చి ఉండాలి.
గాని, ఈ ఫంక్షన్ ను గుర్తుకొనండి?
function sayHi(sName, sMessage) { alert("Hello " + sName + sMessage); }
ఇలాగే నిర్వచించవచ్చు:
var sayHi = new Function("sName", "sMessage", "alert(\"Hello \" + sName + sMessage);");
ఇది స్ట్రింగ్ సంబంధం కారణంగా ఈ రీతిలో రాయడం కష్టం కానిది, కానీ ఫంక్షన్ అనేది ఒక పరిమిత రకం మాత్రమే ఉందని అర్థం చేసుకోవడానికి మద్దతగా ఉంటుంది. ఫంక్షన్ అనేది Function క్లాస్ ద్వారా ప్రకటించబడిన ఫంక్షన్ ప్రవర్తనతో సమానంగా ఉంటుంది.
ఈ ఉదాహరణను చూడండి:
function doAdd(iNum) { alert(iNum + 20); } function doAdd(iNum) { alert(iNum + 10); } doAdd(10); // అవుట్పుట్ "20"
మీకు తెలిసిన మేరకు, రెండవ ఫంక్షన్ మొదటి ఫంక్షన్ ను ఓవర్లోడ్ చేసింది, డోఆడ్(10) "20" అవుట్పుట్ చేసింది, కాదు "30".
ఈ కోడ్ బ్లాక్ ఈ రీతిలో పునర్వ్రాతించినప్పుడు, ఈ విచారణ స్పష్టం అవుతుంది:
var doAdd = new Function("iNum", "alert(iNum + 20)"); var doAdd = new Function("iNum", "alert(iNum + 10)"); doAdd(10);
ఈ కోడ్ పరిశీలించండి, డోఆడ్ యొక్క విలువ వివిధ పరిమితులకు మార్చబడింది కాబట్టి కనిపిస్తుంది. ఫంక్షన్ పేరు ఫంక్షన్ పరిమితికి మాత్రమే సూచిస్తుంది, దాని ప్రవర్తన ఇతర పరిమితులతో సమానంగా ఉంటుంది. కూడా రెండు వ్యవస్థలు అదే ఫంక్షన్ పరిమితికి సూచించవచ్చు:
var doAdd = new Function("iNum", "alert(iNum + 10)"); var alsodoAdd = doAdd; doAdd(10); // అవుట్పుట్ "20" alsodoAdd(10); // అవుట్పుట్ "20"
ఇక్కడ, వ్యవస్థ డోఆడ్ ఫంక్షన్ గా నిర్వచించబడింది, ఆపై alsodoAdd అదే ఫంక్షన్ పరిమితికి సూచించే పంచీగా ప్రకటించబడింది. ఈ రెండు వ్యవస్థలు ఫంక్షన్ కోడ్ నిర్వహించడానికి మరియు అదే ఫలితాన్ని అనుసరించడానికి ఉపయోగించవచ్చు - "20". అందువల్ల, ఫంక్షన్ పేరు ఫంక్షన్ పరిమితికి మాత్రమే సూచిస్తుంది అయితే, ఫంక్షన్ ను మరొక ఫంక్షన్ కు పారామిటర్ గా బదిలీ చేయవచ్చు! అన్నికి జరిగింది!
function callAnotherFunc(fnFunction, vArgument) { fnFunction(vArgument); } var doAdd = new Function("iNum", "alert(iNum + 10)"); callAnotherFunc(doAdd, 10); //输出 "20"
在上面的例子中,callAnotherFunc() 有两个参数 - 要调用的函数和传递给该函数的参数。这段代码把 doAdd() 传递给 callAnotherFunc() 函数,参数是 10,输出 "20"。
గమనిక:ఫంక్షన్ క్రెయిషన్ కన్స్ట్రక్టర్ యొక్క ఉపయోగం చేయకూడదు, ఎందుకంటే అది సాధారణ విధానం కంటే అధికంగా తక్కువ వేగంగా ఫంక్షన్ను నిర్వచిస్తుంది. అయితే, అన్ని ఫంక్షన్లు Function క్లాస్ యొక్క ఇన్స్టాన్స్లుగా చూడబడాలి.
Function ఆబ్జెక్ట్ యొక్క length అంశం
ముందు చెప్పినట్లుగా, ఫంక్షన్లు సందర్భం రకాలకు చెందినవి, కాబట్టి వాటికి అంశాలు మరియు మందిరాలు కలిగి ఉంటాయి.
ECMAScript యొక్క లేంగ్త్ అంశం ఫంక్షన్ ఎంతో మందిరాలను ప్రతీక్షిస్తుంది అని పేర్కొన్నారు. ఉదాహరణకు:
function doAdd(iNum) { alert(iNum + 10); } function sayHi() { alert("Hi"); } alert(doAdd.length); //అవుట్పుట్ "1" alert(sayHi.length); //అవుట్పుట్ "0"
function doAdd() {
గమనించండి, అనేక మందిరాలు నిర్వచించబడినప్పటికీ, ECMAScript ఏకంగా అనేక మందిరాలను అంగీకరిస్తుంది (అత్యగా 25 మందిరాలు), ఇది 'ఫంక్షన్ సమీక్ష' లో పరిచయం చేయబడింది. లేంగ్త్ అనే అంశం అప్రమేయంగా అంచనా లోకి వచ్చే మందిరాల సంఖ్యను చూడటానికి ఒక సులభమైన విధానం అని పరిగణించబడుతుంది. ఫంక్షన్ doAdd() ఒక మందిరాన్ని నిర్వచించింది కాబట్టి దాని లేంగ్త్ 1 ఉంది; sayHi() మందిరాన్ని నిర్వచించలేదు కాబట్టి లేంగ్త్ 0 ఉంది.
Function ఆబ్జెక్ట్ యొక్క మందిరాలు
Function ఆబ్జెక్ట్ కూడా అన్ని ఆబ్జెక్ట్లతో ఉన్న valueOf() మరియు toString() మందిరాలు కలిగి ఉంటాయి. ఈ రెండు మందిరాలు ఫంక్షన్ యొక్క సోర్స్ కోడ్ ని తిరిగి ఇస్తాయి, పరిశీలనలో చాలా ఉపయోగపడుతాయి. ఉదాహరణకు:
function doAdd(iNum) { alert(iNum + 10); } document.write(doAdd.toString());
ఈ కోడ్ డోఆడ్() ఫంక్షన్ యొక్క టెక్స్ట్ ని ఉపసాదిస్తుంది.స్వయంగా ప్రయత్నించండి!
- ముంది పేజీ arguments ఆబ్జెక్ట్
- తరువాతి పేజీ క్లోజర్ (closure)