1

これは、ES5のObject.createのスタンドアロン実装です。

window.createObject = (function() {
    var F = function () {};
    return function(o) {
        F.prototype = o;
        return new F();
    }
}());

およびその使用例:

var cat = createObject(animal);

animalプライベート関数を呼び出そうとすると、の内部が少し乱雑になっていることに気づきました。例:

animal = (function() {
    function privFunc(arg) {
        this.property;
    }

    function publFunc(arg) {
        privFunc.call(this, arg);
    }

    return {
        publFunc: publFunc
    }
}());

このタイプのパターンに従うためのよりクリーンな方法はありますか?特に、の必要性を排除しますprivFunc.call(this, arg)

別の方法は、同様に醜いです:

function privFunc(animal, arg) {
    animal.property;
}

function publFunc(arg) {
    privFunc(this, arg);
}
4

1 に答える 1

1

残念ながら、これがObject.create関数とprivate関数を組み合わせる唯一の方法です。作成された新しいオブジェクトは、プロトタイプを定義するモジュールが公開したパブリックメソッドにのみアクセスできます。モジュール内でプライベートメソッドを使用するには、操作するオブジェクトをそれらのメソッドに渡す必要があります-名前付きパラメーターとして、またはの値を操作するthis

于 2011-04-19T01:55:21.847 に答える