通过JS原型定义字符串格式化方法 |
您所在的位置:网站首页 › js的format方法 › 通过JS原型定义字符串格式化方法 |
初识原型
在python中,我们可以通过format方法来格式化字符串,比如: >>> s = 'I am {name}'.format(name='Ayhan') >>> s 'I am Ayhan' 1 2 3可是,JavaScript中的String类型并没有内置的格式化方法,那么怎么解决这一问题呢?通过JS原型来为类增加方法。首先我们看一下定义JS原型的基本格式:Object.prototype.method= function () {} String.prototype.nb = function (args) { console.log(args); }; var name = 'Ayhan'; name.nb(666);说明:为String类型增加nb方法;实例化一个String对象name,除了String类型固有的方法,name还能调用新增加的nb方法。 准备知识:replace 和 正则我们知道,格式化字符串其实就是一个匹配和替换的过程。在通过JS原型为String类型新增format方法前,我们先看看JavaScript中字符串对象的replace()方法: var name="ayhan"; "ayhan" name.replace("a", "A") "Ayhan"除了以上这种常规的replace(old, new)用法外,该方法的new其实还可以是一个回调函数,用该函数的返回值对old进行替换:replace(old, function(){}): var name = "ayhan"; name.replace("a", function () { return "A"; }); "Ayhan"下面我们通过正则来替代old: var people = "name{ayhan}, age{27}"; people.replace(/\{(\w+)\}/g, function (k, v, i) { console.log(k, v, i); }); /* 打印结果 {ayhan} ayhan 4 {27} 27 16说明: /re/是正则表达式,g是全局匹配;每匹配成功一次,执行一次回调函数; 观察打印结果可以发现,k匹配分组内容, v匹配内容, i索引,其中对我们有用的前两个参数,因此,如果通过第二个参数将内容匹配到,并进行替换,就可以完成字符串{}内容的格式化。 定义format方法 基于以上分析,我们来结合JS原型,replace方法,正则,为String类型新增一个format方法: String.prototype.format = function (dict) { return this.replace(/\{(\w+)\}/g, function (s, i) { return dict[i]; }); };说明: 这里的this指调用该方法的对象本身,类似于python类中的self; replace(re, function(){})通过正则匹配字符,并用回调函数的返回值替换字符; format方法接收一个字典dict,用匹配的内容i作为key, 从dict中取值作为replace回调函数的返回值,替换正则匹配的字符。 使用: dict = {'name': 'Ayhan', "age": "27"}; var people = "My name is {name}, and i am {age}"; people.format(dict); /* "My name is Ayhan, and i am 27" */补充:JS面向对象 在JS中,定义类通过如下方式: var Car = function () { this.wheels = 4; this.engines = 2; this.seats = 1; this.drive = function () { console.log('do something'); } }; // 或者 function Car() { console.log('此处省略好几行...') }我们可以在类中定义方法,但是每实例化一个对象:car = new Car()该对象都会拥有类中定义方法的一份拷贝,这样是很占内存的。更好的方法是通过原型来为类扩展方法: Car.prototype.drive = function() { console.log('do something'); }; |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |