0

電子メール アドレスを難読化する JS オブジェクトを作成しましたが、2 つのわずかに異なる方法を発見しました (それぞれに 1 つのプライベート メソッドと 1 つのパブリック メソッドがあります)。

オブジェクト 1:

var email = new function()
{
    function encrypt(code, key)
    {
        <eliminated for brevity>
    };

    this.mailto = function(address, name)
    {
        link = encrypt(<code>, <key>);
        document.write('<a href="mailto:'+ link +'">'+ name +'</a>');
    }
};

オブジェクト 2:

var email = function()
{
    function encrypt(code, key)
    {
        <eliminated for brevity>
    };

    return {
        mailto: function(address, name)
        {
            link = encrypt(<code>, <key>);
            document.write('<a href="mailto:'+ link +'">'+ name +'</a>');
        }
    };
}();

これらの構文はどちらも機能し、次のように呼び出すことができます。

email.mailto('example', 'Example');

特にメモリ使用量や拡張性に関心があります。
Object 1 が呼び出されるたびに新しいインスタンスを作成するように見えますか?

違いは何ですか?

4

1 に答える 1

2

Object 1 が呼び出されるたびに新しいインスタンスを作成するように見えますか?

いいえ。newキーワードを使用してこれを行っています(そして一度だけ)、email静的オブジェクトです。

違いは何ですか?

最初のemailオブジェクトは、コードでは明らかでない追加のプロトタイプ オブジェクトから継承します。それでも、たとえば初期化関数を保存して、非匿名にします。モジュールの別のインスタンスを作成することができます

var email2 = new (email.constructor)();

これは完全に不必要であり、おそらく意図的ではありません。

私は特にメモリ使用量に興味があります

最初のオプションには追加のプロトタイプ オブジェクトがあり、コンストラクター関数をメモリに保持する必要がありますが、2 番目のオプションは使用後にIEFEをガベージ コレクションできます。2 番目のパターンのみを使用し、最初のパターンは避けてください

于 2013-09-09T15:12:14.377 に答える