ECMAScript အမှုကိရိယ ပြုပြင်
- အရေးယူဆောင်ရာ အကြောင်းအရာ သို့မဟုတ် အရေးယူဆောင်ရာ
- နောက်ပိုင်း ပါးစပ် သိမ်းပိုက်နည်းဥပဒေ အမှတ်
通过使用 ECMAScript,不仅可以创建对象,还可以修改已有对象的行为。
prototype 属性不仅可以定义构造函数的属性和方法,还可以为本地对象添加属性和方法。
အခြား စနစ်များ ထပ်ပေါင်းရန်
အခြား စနစ်များ ကို အသုံးပြု၍ အခြား စနစ်များ ထပ်ပေါင်းရန်
အခြား စနစ်များ ကို အသုံးပြု၍ အခြား စနစ်များ ထပ်ပေါင်းရန် နိုင်ပါသည်။ ဥပမာ၊ Number အကိုယ်အောင်း၏ toString() စနစ်ကို သုံးစွဲပြီး 16 အပ်ပြီး တိဿာအက်ဖိန်း ကြောင်း ဖော်ပြသည်။ အဆိုပါ စနစ်ကို အောင်မြင်စွာ ထပ်ပေါင်းနိုင်ပါသည်:
Number.prototype.toHexString = function() { return this.toString(16); };
အဆိုပါ နိုင်ငံရေး မှာ အကြောင်းအရာ this သည် Number အကိုယ်အောင်း တစ်ခုကို လိုက်နှက်သည်၊ အဆိုပါ ကို သုံးစွဲပြီး အောက်ပါ အပ်ခြင်း ပြုနိုင်ပါသည်:
var iNum = 15; alert(iNum.toHexString()); // ဖော်ပြ "F"
နှင့် အင်္ဂါမြောက် 15 နှင့် အတူ အင်္ဂါမြောက် F ကို ဖော်ပြသည်။
အခြား စနစ်များ အမည်ပြုရန်
တောင်မှာ အခြား စနစ်များ ကို အတိုင်းအတာ ပြောင်းလဲစွာ အမည်ပြုနိုင်ပါသည်။ ဥပမာ၊ Array အကိုယ်အောင်းတွင် enqueue() နှင့် dequeue() အမည်များ ထပ်ပေါင်းပြီး အခြား စနစ်များ ကို အသုံးပြုကာ ပြန်လည်ခေါ်ဆိုနိုင်ပါသည်:
Array.prototype.enqueue = function(vItem) { this.push(vItem); }; Array.prototype.dequeue = function() { return this.shift(); };
အခြား စနစ်များ ထပ်ပေါင်းရန်
တောင်မှာ အခြား စနစ်များ ကို ထပ်ပေါင်းနိုင်ပါသည်။ ဥပမာ၊ အခြား စနစ်များ မပါဘဲ အကြွင်းတွင် အကြွင်းတစ်ခုခု နေရာကို စစ်ဆေးရန် လိုက်လျှင် အခြား စနစ်များ ကို ရေးသားနိုင်ပါသည်:
Array.prototype.indexOf = function (vItem) { for (var i=0; i<this.length; i++) { if (vItem == this[i]) { return i; } } return -1; }
ဒါက indexOf() သည် String အကိုယ်အောင်း၏ အပိုအမှတ်သားသည်ကို ကိုက်ညီစွာ ပြုလုပ်သည်။ အသုံးပြုထားသော အကြွင်းတွင် တစ်ခုခုကို ရှာဖွေကြသည်၊ အပျက်အစီး တစ်ခုခု တွေ့ရှိသောအခါ အပျက်အစီး၏ နေရာကို တင်ပြသည်၊ တင်ပြခြင်း မရှိဘဲ အပျက်အစီး တစ်ခုခု တွေ့ရှိခဲ့လျှင် -1 ကို တင်ပ�သည်။ အဆိုပါ အကြောင်းအရာကို သုံးစွဲပြီး အောက်ပါ ကို ရေးသားနိုင်ပါသည်:
var aColors = new Array("red","green","blue"); alert(aColors.indexOf("green")); //输出 "1"
为本地对象添加新方法
最后,如果想给 ECMAScript 中每个本地对象添加新方法,必须在 Object 对象的 prototype 属性上定义它。前面的章节我们讲过,所有本地对象都继承了 Object 对象,所以对 Object 对象做任何改变,都会反应在所有本地对象上。例如,如果想添加一个用警告输出对象的当前值的方法,可以采用下面的代码:
Object.prototype.showValue = function () { alert(this.valueOf()); }; var str = "hello"; var iNum = 25; str.showValue(); //输出 "hello" iNum.showValue(); //输出 "25"
这里,String 和 Number 对象都从 Object 对象继承了 showValue() 方法,分别在它们的对象上调用该方法,将显示 "hello" 和 "25"。
重定义已有方法
就像能给已有的类定义新方法一样,也可重定义已有的方法。如前面的章节所述,函数名只是指向函数的指针,因此可以轻松地指向其他函数。如果修改了本地方法,如 toString(),会出现什么情况呢?
Function.prototype.toString = function() { return "Function code hidden"; }
前面的代码完全合法,运行结果完全符合预期:
function sayHi() { alert("hi"); } alert(sayHi.toString()); //输出 "Function code hidden"
也许你还记得,Function 对象这一章中介绍过 Function 的 toString() 方法通常输出的是函数的源代码。覆盖该方法,可以返回另一个字符串(在这个例子中,可以返回 "Function code hidden")。不过,toString() 指向的原始函数怎么了呢?它将被无用存储单元回收程序回收,因为它被完全废弃了。没有能够恢复原始函数的方法,所以在覆盖原始方法前,比较安全的做法是存储它的指针,以便以后的使用。有时你甚至可能在新方法中调用原始方法:
Function.prototype.originalToString = Function.prototype.toString; Function.prototype.toString = function() { if (this.originalToString().length > 100) { return "Function too long to display."; } else { return this.originalToString(); } };
အဆိုပါ အချင်းချင်း အရေးယူဆောင်ရာ တွင် ပထမဆုံး အချင်းချင်း ကို ကူးယူခဲ့သည်။ အချင်းချင်း ကို ပြန်လည် အရေးယူဆောင်ဆဲ့ခဲ့သည်။ အချင်းချင်း ကို ပြန်လည် အရေးယူဆောင်ဆဲ့ခဲ့သည်။
စွန့်ဆိုင်းမှု
နည်းပြင်းစွာ မှာ အဆိုပါ စွန့်ဆိုင်းမှု မရှိပါ။ အချင်းချင်း သည် အချင်းချင်း ဖြစ်ပေါ်လာသည်။ အချင်းချင်း ဖြစ်ပေါ်လာသည်။
var o = new Object(); Object.prototype.sayHi = function () { alert("hi"); }; o.sayHi();
အများဆုံး ပြည်ထောင်စု ကုန်းလုံး ပညာရှင် သုံးစွဲမှု များ တွင် အကြောင်းအရာ ကို အသုံးပြုခြင်း အတွက် အရေးယူဆောင်ရာ အရ အကြောင်းအရာ ကို အသုံးပြုခြင်း အတွက် အရေးယူဆောင်ရာ ကို အရေးယူရမည်ဖြစ်သည်။ အရေးယူဆောင်ရာ အတွက် အကြောင်းအရာ သည် အချင်းချင်း ဖြစ်ပေါ်လာသည်။ အခြား ပညာရှင် သုံးစွဲမှု များ တွင် အချင်းချင်း ဖြစ်ပေါ်လာသည်။ အချင်းချင်း ဖြစ်ပေါ်လာသည်။
သတိပြုရန်အဆိုပါ အကူအညီပြုခြင်း ကို စွန့်ဆိုင်းမှု နှင့် လျှို့ဝှက်မှု ကြောင့် နောက်ပြန် မမှန်းနိုင်ပါ။ သို့သော်လည်း အကူအညီပြုခြင်း ကို သိရှိပါက ဖြစ်ပါသည်။
- အရေးယူဆောင်ရာ အကြောင်းအရာ သို့မဟုတ် အရေးယူဆောင်ရာ
- နောက်ပိုင်း ပါးစပ် သိမ်းပိုက်နည်းဥပဒေ အမှတ်