javascript
通过JS原型定义字符串格式化方法
初識原型
在python中,我們可以通過format方法來格式化字符串,比如:
>>> s = 'I am {name}'.format(name='Ayhan') >>> s 'I am Ayhan'可是,JavaScript中的String類型并沒有內置的格式化方法,那么怎么解決這一問題呢?通過JS原型來為類增加方法。首先我們看一下定義JS原型的基本格式:Object.prototype.method= function () {}
<script>String.prototype.nb = function (args) {console.log(args);};var name = 'Ayhan';name.nb(666);</script>說明:為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 */說明:
定義format方法
基于以上分析,我們來結合JS原型,replace方法,正則,為String類型新增一個format方法:
<script>String.prototype.format = function (dict) {return this.replace(/\{(\w+)\}/g, function (s, i) {return dict[i];});};</script>說明:
這里的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'); };更多JS面向對象,參考JavaScript基礎二
總結
以上是生活随笔為你收集整理的通过JS原型定义字符串格式化方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript数据结构与算法(1)
- 下一篇: 简述 JavaScript 作用域与词法