您的位置:首页 > Web前端 > JavaScript

JavaScript学习笔记——扩展类

2015-09-24 17:13 639 查看
我们在开发过程中,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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: