[js高手之路] 跟GhostWu一起封装一个字符串工具库-扩展camelize与dasherize方法(3)

在此之前,我们已经完成了4个方法: 

trimLeft, trimRight, trim, capitalize

本文,我们扩展驼峰式与下划线转化这两个对称的方法

camelize: 把空格,下划线,中横线后面的首字母大写.

dasherize: 把空格后面的大写字母,大写字母,下划线后面的大写字母,变成  中横线 + 对应的小写字母:

如: MozBorderRadius 变成 -moz-border-radius

 1 ; (function (window, undefined) {
 2     function init(obj, s) {
 3         if (s !== null && s !== undefined) {
 4             if (typeof s === 'string') {
 5                 obj.s = s;
 6             } else {
 7                 obj.s = s.toString();
 8             }
 9         } else {
10             obj.s = s;
11         }
12     }
13 
14     function G(s) {
15         init(this, s);
16     }
17 
18     function GhostWu(s) {
19         return new G(s);
20     }
21 
22     var sProto = String.prototype;
23     G.prototype = {
24         constructor: G,
25         capitalize: function () {
26             return new this.constructor(this.s.slice(0, 1).toUpperCase() + this.s.substring(1).toLowerCase());
27         },
28         trimLeft: function () {
29             var s;
30             if (sProto.trimLeft === 'undefined')
31                 s = this.s.trimLeft();
32             else
33                 s = this.s.replace(/^s+/g, '');
34             return new this.constructor(s);
35         },
36         trimRight: function () {
37             var s;
38             if (sProto.trimRight === 'undefined')
39                 s = this.s.trimRight();
40             else
41                 s = this.s.replace(/s+$/g, '');
42             return new this.constructor(s);
43         },
44         trim: function () {
45             var s;
46             if (typeof sProto.trim === 'undefined') {
47                 s = this.s.replace(/^s+|s+$/g, '');
48             } else {
49                 s = this.s.trim();
50             }
51             return new this.constructor(s);
52         },
53         camelize : function () {
54             var s = this.trim().s.replace(/(-|_|s)+(.)?/g, function ( s0, s1, s2 ) {
55                 return ( s2 ? s2.toUpperCase() : '' );
56             });
57             return new this.constructor(s);
58         },
59         dasherize : function(){
60             var s = this.trim().s.replace(/[_s]+/g, '-').replace(/([A-Z])/g, '-$1').replace(/-+/g, '-').toLowerCase();
61             return new this.constructor(s);
62         }
63     };
64 
65     window.G = GhostWu;
66 })(window, undefined);
console.log( G( 'ghost wu tell you how to learn js').camelize().s );//ghostWuTellYouHowToLearnJs
console.log( G( 'ghost-wu-tell you how to learn js').camelize().s );//ghostWuTellYouHowToLearnJs
console.log( G( 'ghost_wu_tell you how to learn js').camelize().s );//ghostWuTellYouHowToLearnJs
console.log( G( '-moz-border-radius' ).camelize().s );//MozBorderRadius

console.log( G( 'MozBorderRadius' ).dasherize().s ); //-moz-border-radius
console.log( G( 'backgroundColor' ).dasherize().s ); //background-color
console.log( G( 'background color' ).dasherize().s ); //background-color
原文地址:https://www.cnblogs.com/ghostwu/p/7402094.html