0

以下のコードでは

(function x() {
var j = function() { alert("234234"); }
return {
    s: j
}
})()

var x1 = new x();
x1.s();

メソッド j() を呼び出す方法は? または、その前に、関数 x() のインスタンスを作成する方法はありますか?それが起こっているからです。フィドルhttp://jsfiddle.net/e5k6bdvn/を参照してください

4

2 に答える 2

8
  1. 自己呼び出し関数に名前を付けないでください (その時点で必要のないスタックトレースで見つけやすくする以外に、ほとんど利点がなく、古い IE ではメモリ リークが発生します)。
  2. 自己呼び出し関数を 2 回呼び出さないでください
  3. 自己呼び出し関数をコンストラクター関数のように扱わないでください (を使用して呼び出しますnew) 。
  4. 自己呼び出し関数の戻り値をキャプチャする

そのような:

    var x = (function () {
        var j = function() { alert("234234"); };
        return {
            s: j
        };
    })();
    
    x.s();


または、同じ方法で複数のオブジェクトを作成する場合:

  1. 自己呼び出し関数を使用しないでください
  2. 好きなだけ電話xしてください

そのような:

    function x () {
        var j = function() { alert("234234"); };
        return {
            s: j
        };
    };

    var x1 = x();
    var x2 = x();
    x1.s();


または、コンストラクター関数を作成する場合:

  1. そこから何も返さないでください
  2. プロトタイプチェーンを使用してください

そのような:

    function x () {
    };

    x.prototype.s = function () {
        alert("234234");
    }
    
    var x1 = new x();
    var x2 = new x();
    x1.s();

于 2015-01-23T18:20:14.440 に答える
1

@epascarello が述べたように、質問の文脈が何であるかを言うのは難しいです。

の意味がxオブジェクトを複数回返すことである場合は、すぐに呼び出すべきではありません。代わりに、次のように宣言するだけです。

function x () { return { j: function () { alert("234234") } } }

その後、いつでも呼び出すことができますj

var x1 = x();
x1.j();

代わりに一度だけ使用する予定の場合はx、すぐに呼び出すのが良いですが、呼び出しもすぐに消費する必要がありますj

(function () {
    return {
        j: function () {
            alert("234234")
        }
    }
})().j();
于 2015-01-23T18:27:06.627 に答える