ای سی ایم اسکریپت آئی اینڈی دائرہ
- پچھلے پہلہ آئیٹم کا نوعیت
- آئندہ پہلہ کلاس یا آئیٹم کا تعریف کریں
اسکوپ یعنی متغیروں کا استعمال کا دائرہ
عام، پرائیویٹ اور پروٹکٹیو اسکوپ
مفہوم
روایتی سمت کی پرانے کلاسیک پروگرامنگ میں، عام اور پرائیویٹ اسکوپ پر اکثر توجہ دی جاتی ہے۔عام اسکوپ میں کلاس کی پراپریٹی کا استعمال کیا جاسکتا ہے، یعنی ڈیولپر نے اوبجیکٹ کا مثال بنایا ہے تو اس کی عام پراپریٹی استعمال کی جاسکتی ہیں۔اما اگر پرائیویٹ اسکوپ میں کسی پراپریٹی کا استعمال کیا گیا ہے تو وہ بیرونی عالم میں موجود نہیں رہتا، یعنی ان پراپریٹیوں کو بیرونی عالم میں استعمال نہیں کیا جاسکتا۔یہ معنیات کہ اگر کسی کلاس میں پرائیویٹ پراپریٹی اور میتوں کا استعمال کیا گیا ہے تو اس کی ذیلی کلاس نہیں ان پراپریٹیوں اور میتوں کو استعمال کرسکتی ہے۔
پروٹکٹیو اسکوپ بھی عام پراپریٹی اور میتوں کی تعریف کے لئے استعمال کیا جاتا ہے، لیکن ان پراپریٹیوں اور میتوں کو ان کی ذیلی کلاسوں بھی استعمال کیاجاسکتا ہے。
ECMAScript صرف عام اسکوپ ہے
ECMAScript میں اس طرح کے اسکوپ پر بحث کرنا بے فائدہ ہے، کیونکہ ECMAScript میں صرف ایک طرح کا اسکوپ ہے - عام اسکوپ۔ECMAScript میں تمام اوبجیکٹوں کی تمام پراپریٹی اور میتوں بلا محدود استعمال کی جاسکتی ہیں۔اس لئے، اپنی کلاس اور اوبجیکٹوں کو تعریف کرتے وقت بہت توجہ دہانی کریں، یاد رکھیں کہ تمام پراپریٹی اور میتوں بلا محدود استعمال کی جاسکتی ہیں!
مقصد دار حل
بہت سے ڈیولپرز نے آن لائن میں موثر پراپریٹی اسکوپ ماڈل پیش کئے ہیں، جو ECMAScript کے اس مسئلے کو حل کردا ہے。
پرائیویٹ اسکوپ کی کمی کی وجہ سے، ڈیولپر نے ایک قاعدہ طے کیا ہے جس میں کیا پراپریٹی اور کیا می�تد کو پرائیویٹ کے طور پر دیکھا جانا چاہئے۔یہ قاعدہ اس طرح طے کیا گیا ہے کہ پراپریٹی کے پہلے اور پچھلے میں سائز لائن استعمال کیا جاتا ہے:
obj._color_ = "blue";
یہ کد میں، پراپریٹی کالر پرائیویٹ ہے۔توجہ دہانی کریں، سائز لائن پراپریٹی کو عام پراپریٹی بنانے میں کوئی تبدیلی نہیں کردا، وہ صرف دوسرے ڈیولپرز کو بتاتا ہے کہ وہ اس پراپریٹی کو پرائیویٹ کے طور پر دیکھیں。
有些开发者还喜欢用单下划线说明私有成员,例如:obj._color。
静态作用域
静态作用域定义的属性和方法任何时候都能从同一位置访问。在 Java 中,类可具有属性和方法,无需实例化该类的对象,即可访问这些属性和方法,例如 java.net.URLEncoder 类,它的函数 encode() 就是静态方法。
ECMAScript 没有静态作用域
严格来说,ECMAScript 并没有静态作用域。不过,它可以给构造函数提供属性和方法。还记得吗,构造函数只是函数。函数是对象,对象可以有属性和方法。例如:
function sayHello() { alert("hello"); } sayHello.alternate = function() { alert("hi"); } sayHello(); //输出 "hello" sayHello.alternate(); //输出 "hi"
这里,方法 alternate() 实际上是函数 sayHello 的方法。可以像调用常规函数一样调用 sayHello() 输出 "hello",也可以调用 sayHello.alternate() 输出 "hi"。即使如此,alternate() 也是 sayHello() 公用作用域中的方法,而不是静态方法。
关键字 this
this 的功能
在 ECMAScript 中,要掌握的最重要的概念之一是关键字 this 的用法,它用在对象的方法中。关键字 this 总是指向调用该方法的对象,例如:
var oCar = new Object; oCar.color = "red"; oCar.showColor = function() { alert(این کلیدی فہرست بند); }; oCar.showColor(); //输出 "red"
在上面的代码中,关键字 this 用在对象的 showColor() 方法中。在此环境中,this 等于 oCar。下面的代码与上面的代码的功能相同:
var oCar = new Object; oCar.color = "red"; oCar.showColor = function() { alert(oCar.color); }; oCar.showColor(); //输出 "red"
使用 this 的原因
为什么使用 this 呢?因为在实例化对象时,总是不能确定开发者会使用什么样的变量名。使用 this,即可在任何多个地方重用同一个函数。请思考下面的例子:
فونکشن شوکولر() { alert(این کلیدی فہرست بند); }; وار اوکار1 = نیو اوبجیکٹ; اوکار1.کالر = "رد"; اوکار1.showColor = شوکولر; وار اورکار2 = نیو اوبجیکٹ; اوکار2.کالر = "بلیو"; اوکار2.showColor = شوکولر; اوکار1.showColor(); //رد کا چاپ اوکار2.showColor(); //بلیو کا چاپ
اُس کوڈ میں، ابتدا میں فونکشن شوکولر() کو this کے ذریعہ معلوم کیا گیا، بعد میں دو آئیٹم (اوکار1 اور اوکار2) بنائے گئے، ایک آئیٹم کی 'کالر' خصوصیات 'رد' کے طور پر ستیز کی گئی، دوسرے آئیٹم کی 'کالر' خصوصیات 'بلیو' کے طور پر ستیز کی گئی۔ دو آئیٹم دونوں کو 'شوکولر' خصوصیات دی گئی، جو اصل شوکولر() فونکشن کو نکالتا ہوا (توجیہ: یہاں میں کوئی نام کا مسئلہ نہیں ہوتا، کیونکہ ایک عالمی فونکشن اور دوسرا آئیٹم کی خصوصیات کا نام ساتھی نہیں ہوتا)。اوکار1.showColor() کو بلا کسی مسئلے چلایا جائے تو، فونکشن میں this کلیدی فہرست بند اوکار1 سے برابر ہوگا۔ اوکار2.showColor() کو بلا کسی مسئلے چلایا جائے تو، فونکشن میں this کلیدی فہرست بند اوکار2 سے برابر ہوگا۔
توجیہ، آئیٹم کی خصوصیات کو رجوع کریں تو، ضرور this کلیدی فہرست بند استعمال کیا جانا چاہئے۔ مثلاً اگر اس طرح کا کوڈ استعمال کیا جائے، شوکولر() میتھد نہیں چل سکتا:
فونکشن شوکولر() { alert(کالر); };
اگر آئیٹم یا this کلیدی فہرست بند نہ ہو، ایکما اسکریپٹ آنگل یا عالمی فہرست بند کے طور پر دیکھا جائیگا۔ تو اس فونکشن میں وہ 'color' نام کا محلی یا عالمی فہرست بند نا ملے گا۔ نتیجتاً کیا ہوگا؟ فونکشن 'null' کو وارننگ میں دکھائی دے گا۔
- پچھلے پہلہ آئیٹم کا نوعیت
- آئندہ پہلہ کلاس یا آئیٹم کا تعریف کریں