ای سی ایم اسکریپٹ فنکشن اپنٹ (کلاس)

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"

آپ جانتا ہوگا کہ دوسری فانکشن نے پہلی فانکشن کو اور لوڈ کردیا ہے، اس لئے doAdd(10) نے "20" نکالا، نہ کہ "30"۔

اگر اس کو اس طرح سے دوبارہ لکھا جائے تو اس کا معنیًت واضح ہوگا:

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

یہ کوئی بھی کاود کا نظر دیئے، واضح طور پر doAdd کا مالکیت بدل گیا ہے، اس کا سمت نکالایا گیا ہے، فانکشن کا نام صرف فانکشن کی اشاریہ کا حوالہ ہے، اور اس کا کام دیگر اشیاء کی طرح ہوتا ہے۔ حتا دو متغیرات کو ایک ہی فانکشن کی سمت میں نکالا جاسکتا ہے:

var doAdd = new Function("iNum", "alert(iNum + 10)");
var alsodoAdd = doAdd;
doAdd(10);	// نکالا جائے گا - "20"
alsodoAdd(10);	// نکالا جائے گا - "20"

یہاں، متغیر doAdd کو فانکشن کے طور پر دکھایا گیا ہے، سپریمپل doAdd کو ایک ہی فانکشن کی سمت میں نکالایا گیا ہے۔ دونوں متغیرات کے ذریعے اس فانکشن کا کوڈ چلایا جاسکتا ہے اور اسی نتائج کو نکالا جاسکتا ہے - "20"۔ لہذا اگر فانکشن کا نام صرف فانکشن کی متغیر کا حوالہ ہے تو اس کو دوسری فانکشن کو پارامٹر کے طور پر دیا جاسکتا ہے! جواب مثبت ہے!

function callAnotherFunc(fnFunction, vArgument) {
  fnFunction(vArgument);
}
var doAdd = new Function("iNum", "alert(iNum + 10)");
callAnotherFunc(doAdd, 10);	// نکالا '20'

مذکورہ مثال میں، callAnotherFunc() کے دو پارامتر ہیں - بکالایا فنکشن اور فنکشن کو دیئے گئے پارامتر۔ اس کا کاودو doAdd() کو callAnotherFunc() فنکشن کو دیئے گئے پارامتر 10، نکالا '20' ہوتا ہے۔

توجہ:بجائے فنکشن کی تعریف شدہ تعمیر کا استعمال، بہتر نہیں کریں، کیونکہ اس کا استعمال کئی مرتبہ تربیت سے بہت کم سارکار ہوتا ہے، باقی فنکشنوں کو بھی فنکشن کی نوعیت کی مثال کی طرح دیکھا جاتا ہے۔

فنکشن اوبجیکٹ کا اپریشن length

جیسا کہ پہلے بتایا گیا ہے، فنکشنوں کو مرادف نوعیتوں کی بنیاد پر دیکھا جاتا ہے، لہذا وہ بھی اپنے اپریشنوں اور اپنے اپریشنوں کی طریق رکھتی ہیں۔

ایکم بار کے طور پر، ECMAScript کا تعریف شدہ اپریشن length فنکشن کی متوقع پارامتروں کی تعداد کو بیان کرتا ہے، مثال کی طرح:

function doAdd(iNum) {
  alert(iNum + 10);
}
function sayHi() {
  alert("Hi");
}
alert(doAdd.length);	// نکالا '1'
alert(sayHi.length);	// نکالا '0'

فنکشن doAdd() میں ایک پارامتر دیا گیا ہے، لہذا اس کا length 1 ہے؛ sayHi() میں کوئی پارامتر نہیں دیا گیا ہے، لہذا length 0 ہے۔

یاد رکھو، جو بھی اعداد آپ کا فنکشنوں کو قبول کرسکتا ہے (بہترین 25)، اس بات کو 'فنکشن کی وضاحت' میں بتایا گیا ہے، اپریشن length صرفاً اعداد کو دفعاتی طور پر دیکھنے کی آسانی فراہم کرتا ہے۔

فنکشن اوبجیکٹ کی طریق

فنکشن اوبجیکٹ بھی تمام اوبجیکٹوں کی ساجھیدار valueOf() اور toString() طریق رکھتی ہیں، دونوں طریق فنکشن کا ماخوذ کو واپس نکالتے ہیں، جس میں دوبارہ تلاش میں خاص طور پر مفید ہوتا ہے۔ مثال کی طرح:

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

یہ پاراگراف کو کا دا doAdd() فنکشن کا متن نکالا دا ہے۔خود شخصی طور پر کوشاں!