作者:Dflying Chen (http://dflying.cnblogs.com/)
JavaScript是一門非常強大的基於對象(Object Based)的語言,但是對物件導向(Object Oriented)的支援還存在一些不足,同時JavaScript內建的類庫也比較簡單,甚至缺乏一切很常用的功能。ASP.NET Atlas在運行時擴充了JavaScript,大大增強了它的物件導向支援能力,並擴充了一些開發時常用的操作。
我參考了一下Atlas.js檔案,總結出Atlas對JavaScript有如下擴充。某些地方有所遺漏或錯誤,還請各位包涵並指正。
String對象的擴充
- String String.ltrim()
移除原String開頭部分所有的空格,並返回一個新String對象。
- String String.rtrim()
移除原String結尾部分所有的空格,並返回一個新String對象。
- String String.trim()
移除原String開頭和結尾部分所有的空格,並返回一個新String對象。
- Boolean String.endsWidth(strEnd)
該String是否以傳入的String結束。
- Boolean String.startsWith(strStart)
該String是否以傳入的String開始。
- String String.format(args1,args2,.)
類似於C#中的String.Format(),被操作的String中的{n}將被代替為相應的第n個參數,並返回一個新String對象。
- String String.removeSpaces()
移除原String中的所有空格,並返回一個新String對象。
- String String.removeExtraSpaces()
將原String中連續的空格置換成單一的空格(包括斷行符號),並返回一個新String對象。
- String String.removeSpaceDelimitedString(str)
將原String中的指定單詞(被空格分開的文字片斷)移除,並返回一個新String對象。這個方法可以用在刪除包含多個class名稱DOM元素的某個class名稱時候。
Array對象的擴充
- void Array.queue(objValue)與void Array.add(objValue)
將指定的objValue插入到該Array的末端。
- void Array.addRange(rangeArray)
將指定的rangeArray加入該Array的尾部。
- Boolean Array.contains(objValue)與Boolean Array.exists(objValue)
返回布爾值,代表該Array是否包含objValue項目。
- Array Array.clone()
返回該Array的一個淺拷貝副本。
- void Array.insert(index, objValue)
將指定的objValue插入到該Array的index位置。
- Object Array.dequeue()
移除並返回該Array中的第一個條目。
- Object Array.removeAt(index)
移除並返回該Array中指定的index的條目。
- Boolean Array.remove(objValue)
移除該Array中指定的objValue條目,返回布爾值代表該條目是否存在並被成功移除。
- Array Array.parse(string)
將傳入的以string表示的Array解析成Array。
- void Array.clear()
清空該Array中的所有條目。
- Integer Array.get_length()
返回該Array的條目數,等同於Array.length。
- Object Array.getItem(index)
返回該Array中指定index的條目。
Date對象的擴充
- String Date.toFormattedString(stringFormat)
依照輸入的stringFormat格式化並輸出該Date對象(format string太多了……懶得寫了,需要的直接看Atlas.js中748-871行好了)。
Number對象的擴充
- Number Number.parse(string)
嘗試解析傳入的stirng為Number。
- String Number.toFormattedString(stringFormat)
依照輸入的stringFormat格式化並輸出該Number對象(format string還是太多了……懶得寫了,需要的直接看Atlas.js中935-1024行)。
Sys.StringBuilder類
類似於C#中的StringBuilder:
var sb = new Sys.StringBuilder();
sb.append("<div>");
sb.appendLine("a line of text");
sb.append("</div>");
someDOMElem.innerHTML = sb.toString();
物件導向的支援
定義可以被繼承的基類
BaseClass = function()
{
// object
}
BaseClass.registerClass("BaseClass");
繼承類
DerivedClass = function()
{
// Call base constructors
// The 2nd argument is an array you can use to pass arguments
DerivedClass.intializeBase(this,arguments);
}
DerivedClass.registerClass("DerivedClass","BaseClass");
多重繼承
MultipleInherit= function()
{
MultipleInherit.intializeBase(this,arguments); // bootstrap
// object
}
MultipleInherit.registerClass("MultipleInherit",["BaseClass", "DerivedClass"]);
定義可被覆寫(override)的方法
BaseClass = function()
{
// object
this.initialize = function()
{
}
BaseClass.registerBaseMethod(this,"initialize");
}
BaseClass.registerClass("BaseClass");
調用基類被覆寫的方法 DerivedClass = function()
{
DerivedClass.initializeBase(this,arguments); // bootstrap
this.initialize = function()
{
DerivedClass.getBaseMethod(this,"BaseClass","initialize").call(this);
// To pass arguments to base class:
// .call(this,args1,args2,args3)
}
}
DerivedClass.registerClass("DerivedClass",["Atlas.Bindings.Base","BaseClass"]);
名稱空間
registerNamespace("Web.Utility");
// Implement Web Utility
registerNamespace("Web.Performance");
// Implement Performance
定義Enum類型
var theEnum = Type.createEnum("name1","name2");
for (var strItems in theEnum.getValues())
{
}
定義Flag類型
var theFlags = Type.createFlags("name1",value1,"name2",value2,);