0

Javascriptコードを書いていると、Rubyの #{} メソッドが恋しいので、JSで実装しています。しかし、このコードはクリーンでも美しいものでもありません。この方法を安全​​にしたいのですが、できません。
このコードが安全または美しいものになると思いますか? 前もって感謝します。

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);
4

3 に答える 3

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";

JavaScriptにコンパイルされる言語であるCoffeeScriptも、この機能をサポートしています。

于 2012-08-08T16:30:33.813 に答える
3

必要なものに最も近いのは、mustacheなどのテンプレート システムです。次のようなことができます。

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

var output = Mustache.render("I'm {{name}} and I am {{age}} years old.", person);
于 2012-08-08T16:34:17.693 に答える
0

または、コーヒースクリプトを使用してください。

http://coffeescript.org/#strings

また#{}、Ruby のメソッドではなく、「文字列補間」と呼ばれます。

http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals#Interpolation

于 2012-08-08T16:32:31.700 に答える