ASP.NET Atlas对JavaScript的扩展
作者: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();
sb.append("<div>");
sb.appendLine("a line of text");
sb.append("</div>");
someDOMElem.innerHTML = sb.toString();
面向对象的支持
定义可以被继承的基类
BaseClass = function()
{
// object
}
BaseClass.registerClass("BaseClass");
{
// 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");
{
// 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"]);
{
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");
{
// 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"]);
{
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
// Implement Web Utility
registerNamespace("Web.Performance");
// Implement Performance
定义Enum类型
var theEnum = Type.createEnum("name1","name2");
for (var strItems in theEnum.getValues())
{
}
for (var strItems in theEnum.getValues())
{
}
定义Flag类型
var theFlags = Type.createFlags("name1",value1,"name2",value2,);