Inaifunze ya Function wa ECMAScript (kama class)

Kifaa cha Function cha ECMAScript kinaweza kueleza kazi zaidi ya kufikiria.

Kifaa cha Function (class)

Kinyume cha ECMAScript kinapendekeza kwamba programu inayofanya kazi ni kama objekti zaidi ya kufikiria.

Class ya Function inaweza kueleza kazi yoyote inayotolewa na mtengelishi.

Mwongozo wa kuzungumza kwa Function inayofanywa kwa msingi wa Function ni kama:

var function_name = new function(arg1, arg2, ... , argN, function_body)

katika muundo hii, kila arg zina moja, msaada wa kwanza ni programu inayotendeka (kazi inayotendeka). Msaada hizi lazima zikuwa maneno.

Rima hii programu hii?

function sayHi(sName, sMessage) {
  alert("Hello " + sName + sMessage);
}

inaweza kufanyishwa kama hii:

var sayHi 
= 
new Function("sName", "sMessage", "alert(\"Hello \" + sName + sMessage);");

Ingawa hii inayofikirika kwa sababu ya urahisi wa uandikaji, inafaa kuelewa kwamba programu ni aina ya kipengele cha programu, inayotendeka kama programu inayotengenezwa na Function class.

Tafadhali angalia mafanikio hii:

function doAdd(iNum) {
  alert(iNum + 20);
}
function doAdd(iNum) {
  alert(iNum + 10);
}
doAdd(10);	//kutoa "20"

Kama unafikiria, programu ya pili inakaribia programu ya kwanza, inayofanya doAdd(10) kutoa "20", hali inayotambua inaingia "30".

Kama inaweza kurekebisha chakula hii kwenye hali hii, maana hiyo inaweza kufaa kuelewa:

var doAdd = new Function("iNum", "alert(iNum + 20)");
var doAdd = new Function("iNum", "alert(iNum + 10)");
doAdd(10);

Tafadhali angalia chakula hii, bila shida inayotambua, doAdd inayoweza kubadilika kuelewa kwa kipengele cha programu kina ingine. Mtu wa programu ni kizani inayowakilisha kipengele cha programu, inayotendeka kama kipengele cha programu zingine. Hata inaweza kumekua kwa muhimu zingine katika mtu wa programu yeyote:

var doAdd = new Function("iNum", "alert(iNum + 10)");
var alsodoAdd = doAdd;
doAdd(10);	//kutoa "20"
alsodoAdd(10);	//kutoa "20"

Hapa, muhimu doAdd inayoweza kufunguliwa kama mtu wa programu, na alsodoAdd inayoweza kufanyishwa kuelewa kwa mtu wa programu yeyote. Kwa sababu hiyo, niweza kutumia muhimu ya kila uwanja kuwafanya kwa kufanya kazi ya programu, na kutoa matokeo yafuatayo - "20". Kwa hivyo, niweza kutumia mtu wa programu kama thamani kwa programu nyingine?

function callAnotherFunc(fnFunction, vArgument) {
  fnFunction(vArgument);
}
var doAdd = new Function("iNum", "alert(iNum + 10)");
callAnotherFunc(doAdd, 10);	//输出 "20"

callAnotherFunc(doAdd, 10); //kutumia "20"

Kwenye mafano hayo, callAnotherFunc() ina vifaa pekee vya mbili - kifungu kinatokana na vifaa vya kifungu kinatolewa na vifaa vya kifungu kinatolewa. Hii inatumia kifungu doAdd() kwa callAnotherFunc() kifungu, vifaa vya kifungu ni 10, na kutoa "20".Tukijua:

Inasikitia kufanya kifungu kwa kifungu cha Function inasikitia kufanya kifungu kwa njia ya kina zaidi, kwa sababu kifungu kinahitaji zaidi ya wakati kama kina. Inafikia kwamba kila kifungu kinahitaji kuwa mmoja wa kikundi cha Function.

Jina la hatua length la Mwana wa kifungu

Mfano, kama ilivyotarajia, kifungu kinahusiana na kina ya kifungu, kwa hivyo yana vifaa na vifaa vya kina.

function doAdd(iNum) {
  alert(iNum + 10);
}
function sayHi() {
  alert("Hi");
}
alert(doAdd.length);	//kutumia "1"
alert(sayHi.length);	//kutumia "0"

Kifungu doAdd() kinaeleza vifaa pekee, kwa hivyo length yake ni 1; sayHi() haina vifaa vya kina, kwa hivyo length yake ni 0.

Rekoda, bila kufikiria nafasi ya vifaa vya kifungu, ECMAScript inaweza kumwambia vifaa vya kina kwa ulezo mkubwa (kwa kina 25), hiki ilikuwa ikiwa kwenye kitabu cha 'Muhtasari wa Kifungu'. Jina la hatua length inaonyesha nafasi ya kufikiria vifaa vya kina kwa sababu ya kina.

Vifaa vya Mwana wa kifungu

Mwana wa kifungu pia ina vifaa vya kila kiwango kama valueOf() na toString(). Vifaa hivi vinatoa kwa sababu ya kina ya kifungu, ni muhimu sana kwenye mafunzo. Mfano:

function doAdd(iNum) {
  alert(iNum + 10);
}
document.write(doAdd.toString());

Maktaba hizi ya kichupo inaonyesha ujumbe wa kifunungu doAdd().Mtafiti tena