2012-08-08 60 views
0

當我編寫Javascript代碼時,我覺得Ruby的方法很錯。所以我在JS中實現它。 但是這段代碼並不乾淨漂亮。我想讓這個方法安全,但我做不到。
你有什麼想法,這段代碼安全或美麗?提前致謝。如何在我編寫的JavaScript中重構Ruby的#{}方法

String.prototype.to_s = function(){ 
    var str = this.toString(); 


    // convert function is bad because it use eval... 
    var convert = function(s){ 
     return eval(s); 
    }; 

    // It's slower because call ReGexp method too many times. 
    while(/#{(\w+)}/.test(str)){ 


     var matchStr =RegExp.$1; 

     var str = str.replace(/#{(\w+)}/,convert(matchStr)); 

    } 
    return str; 
}; 



var name = "nobi"; 

var age = 23; 

var body = "I'm #{name} and I am #{age} years old".to_s(); 
// I'm nobi and I am 23 years old. 


console.log(body); 
+0

當它歸結爲它基本上是一個模板,就像小鬍子,把手和ExtJS模板。也許看看他們是如何實施的? – 2012-08-08 16:32:35

回答

3

這種破解不能做成「美麗」 - 它甚至不適用於非全局變量。但是,鑑於ES6的支持,你不需要破解;字符串插值現在是該語言的一部分。

var body = `I'm ${name} and I am ${age} years old`; 

做不到這一點,字符串連接往往是可讀足以與ES5和更早版本:

var body = "I'm " + name + " and I am " + age + " years old"; 

CoffeeScript,編譯爲JavaScript的語言,也支持該功能。

3

最接近的事你想會是一個模板系統的東西,如mustache。它可以讓你做這樣的事情:

var person = { 
    name: "nobi", 
    age: 23 
}; 

var output = Mustache.render("I'm {{name}} and I am {{age}} years old.", person);