JScript 多載方法的方式
當某個類別中有兩個或多個 JScript 成員 (函式或屬性) 的名稱相同但簽章不同時,這些成員即稱為「多載」函式 (屬性)。 函式的「簽章」是根據其接受的參數數量、型別和順序而定。 如果兩個函式以相同順序接受相同數量且相同型別的引數,則其簽章也會相同。 若函式以不同順序接受相同型別的引數,或者擁有不同數量或不同型別的引數,其簽章也就不同 (注意,引數的名稱對於簽章沒有任何影響)。 靜態函式也可以有多載,但和回傳回型別一樣,方法的靜態狀態不會影響其簽章。 因此,與執行個體方法名稱相同的靜態方法必須有不同的參數清單。
處理邏輯
呼叫多載函式時,會根據傳遞至函式的實際引數型別,呼叫其引數最接近所傳遞引數的多載函式。 如果引數型別與特定多載完全相符,則會呼叫該項多載。 如果引數型別未與任何多載完全相符,則會執行刪除程序決定要呼叫的多載。 刪除程序會根據實際型別轉換至可用的多載型別的難易度而定。 如需詳細資訊,請參閱 JScript 中的強制型轉。 在這個範例中,MethodOverload 類別有名為 Greetings 的三個多載方法。 第一個多載不會使用任何參數,第二個多載會使用一個 String 型別的參數,而第三個多載則會使用兩個參數︰String 型別和 int 型別的參數。
var methodOverload = new MethodOverload();
methodOverload.Greetings();
methodOverload.Greetings("Mr. Brown");
methodOverload.Greetings(97, "Mr. Brown");
class MethodOverload
{
function Greetings()
{
print("Hello, and welcome!");
}
function Greetings(name : String)
{
print("Hello, " + name + "!");
}
function Greetings(ticket : int, name : String)
{
print("Hello, " + name + "! Your ticket number is " + ticket + ".");
}
}
本程式的輸出為:
Hello, and welcome!
Hello, Mr.Brown!
Hello, Mr.Brown! Your ticket number is 97.