我们在开发过程中,JavaScript内置的类所提供的动态方法和动态属性不满足我们的需求。这时,我们可以通过"prototype"属性给自定义类添加方法和属性或者扩展原有的类中的方法和属性。
一、扩展JavaScript内置类,添加动态方法
语法格式:
类名.prototype.方法名 = function([param1],[param2],....[paramn]) {
.................
}
[param1],[param2],....[paramn]这些参数都是可选的
使用这种方式给类添加的扩展方法都是动态的,动态方法是针对类的实例对象的,所以调用必须要用"对象.方法名"的形式去调用,不能用"类名.方法名"的形式去调用!
1.1、使用Prototype扩展String类String类是JavaScript内置的一个类,但是这个String类没有quote方法,此时就可以使用String类的prototype属性去扩展String类了,为String类添加一个实例方法(动态方法),这样每一个String类对象就都有quote方法了,这就达到了将String类扩展的效果,增强了String类的使用。
/*扩展为String类,为String类增加quote(两边加字符)方法*/
String.prototype.quote = function(quotestr) {
if (!quotestr) {
quotestr = "\"";
}
return quotestr + this + quotestr;
};
测试String类新添加的quote方法
alert("abc".quote());
alert("abc".quote("|"));
测试结果:
这里要注意的是,几乎很少有人去给Object的prototype添加方法,因为那会影响到所有的对象,除非在你的架构中这种方法的确是所有对象都需要的。
二、扩展JavaScript内置类,添加静态方法
语法格式如下:类名.方法名 = function([param1],[param2],....[paramn]) {
.................
}
[param1],[param2],....[paramn]这些参数都是可选的
使用这种方式给类添加的扩展方法都是静态的,动态方法是针对类的实例对象的,所以调用必须要用"对象.方法名"的形式去调用,而静态方法是针对类的,用"类名.方法名"的形式去调用!
C#中的String类有一个静态的Format方法非常强大,在拼接字符串时特别方便,JavaScript的String类并没有Format方法,但是我们可以去扩展String类,为String类添加类似C#中的String类的静态的Format方法范例:扩展String类,添加Format静态方法,模仿C#中的String.Format方法
// ----------------------------------------------------------------------
// <summary>
// 扩展String类,添加Format静态方法,模仿C#中的String.Format方法
// </summary>
// <returns>str</returns>
// ----------------------------------------------------------------------
if (!String.Format) {
String.Format = function () {
if (arguments.length == 0) {
return null;
}
var str = arguments[0];
if (arguments[1] instanceof Array) {
var arr = arguments[1];
for (var i = 0; i < arr.length; i++) {
var re = new RegExp('\\{' + i + '\\}', 'gm');
str = str.replace(re, arr[i]);
}
} else {
for (var i = 1; i < arguments.length; i++) {
var re = new RegExp('\\{' + (i - 1) + '\\}', 'gm');
str = str.replace(re, arguments[i]);
}
}
return str;
}
}
测试为String类扩展的Format静态方法
var str="我是{0},我在总结{1}和{2}的学习,我很喜欢{3}这2门语言!"; //使用"类名.方法名"的形式去调用类的静态方法 str = String.Format(str,"孤傲苍狼","java","JavaScript","'java'和'JavaScript'");//把str中的占位符{0},{1},{2},{3}用具体的内容替换掉 alert(str);
运行结果:
本文参考:http://www.cnblogs.com/xdp-gacl/p/3702898.html