2

これらの方法は両方とも、同じ呼び出しメカニズムを使用して機能します。

もちろん、最善の方法で使用したいのですが、もしかしたら好みの問題でしょうか?

スタイルに関しては、オブジェクト リテラル表記法が好きです。囲みを提供するからです。

関数表記:

var TextProcessor = function()
{
};
TextProcessor.unEscape = function( second_split )
{
    var element;
    for( element in second_split )
    {
        second_split[element] = second_split[element].replace( '**', '*', 'g' );
        second_split[element] = second_split[element].replace( '|*', '|', 'g' );
    }
    return second_split;
};
TextProcessor.pullBullet = function( text )
{
    var pattern = /<(.+)_([a-z]){1}>$/;
    return pattern.exec( text );
};
TextProcessor.pullDomain = function( text )
{
    return text.match( /:\/\/(www\.)?(.[^\/:]+)/ )[2];
};

オブジェクトリテラル表記

/**
 *TextProcessor
 */

var TextProcessor = 
{
    unEscape:    function( text )
    {
        var index;
        for( index in second_split )
        {
            text[index] = text[index].replace( '**', '*', 'g' );
            text[index] = text[index].replace( '|*', '|', 'g' );
        }
        return second_split;
    },
    pullBullet:  function( text )
    {
        var pattern = /<(.+)_([a-z]){1}>$/;
        return pattern.exec( text );
    },
    pullDomain:  function( text )
    {
        return text.match( /:\/\/(www\.)?(.[^\/:]+)/ )[2];
    }
}
4

1 に答える 1

5

あなたは2つのやや異なることをしています。

  • 最初の例では、関数オブジェクトを作成し、それにプロパティを割り当てます。

  • 2 番目の例では、これらのプロパティを持つプレーン オブジェクトを作成します。

最初のものは、あなたの例では実際にはあまり意味がありません。関数オブジェクトを使用してプロパティを割り当てることができますが、その理由は何でしょうか? これらのプロパティは、関数の呼び出しには影響しません。


「スタイル的には、オブジェクト リテラル表記法が好きです。囲い込みができるからです。」

「囲い込み」が何かわかりません。カプセル化とクロージャーの組み合わせのように聞こえますが、オブジェクト リテラルはどちらも提供しません。


最初の部分に戻って、これらのオブジェクトのいずれかを作成したと想像してください...

var TextProcessor = new Number();
var TextProcessor = new Boolean();
var TextProcessor = new Date();

...そしてそれにプロパティを割り当てました。それはうまくいくでしょうが、それは奇妙なことです。オブジェクトがNumberBoolean、またはであるという事実は、Date当面のタスクとはほとんど関係がありません。

Functionこれは、プロパティをオブジェクトに割り当てるときに実際に行っていることです。

于 2012-04-09T20:42:21.210 に答える