0

コンストラクターからパブリック インターフェイスを返すための次のスタイルを見てきました。

function AnObjectConstructor() {

    function localFunc() {};
    function publicFunc() {};

    // public interface
    var _this = {
        publicFunc: publicFunc
    };
    return _this;
};

public インターフェイスが明確に 1 か所にあり、localFunc は _this を使用せずに publicFunc にアクセスできるため、このスタイルが気に入っています。

このコードは、次のようにも記述できます。

function AnObjectConstructor() {

    function localFunc() {};
    function publicFunc() {};

    // public interface
    var _this = this;
    _this.publicFunc = publicFunc;
    return _this;
};

これらの形式はどちらも new で使用することを意図しています。

var obj = new AnObjectConstructor();
obj.publicFunc();

これらの 2 つの形式が同じかどうかはわかりませんが、誰かが私を助けてくれることを望んでいましたか?

また、このスタイルに関する一般的なコメントもお待ちしております..

4

3 に答える 3

4

これら 2 つのスニペットは同じことをしていません。どちらのスニペットにもパブリック参照がありますがpublicFunc、最初のスニペットはオブジェクト リテラルを返し、2 番目のスニペットは関数への参照を返します。どちらの例も、関数コンストラクターを作成する方法の例ではありません。newオブジェクトのインスタンスをインスタンス化するには、キーワードを使用する必要があります。

function AnObjectConstructor() {
    function localFunc() {};
    function publicFunc() {};
    // public interface
    this.publicFunc = publicFunc;
    //You don't need this line :return _this;
};

var obj = new AnObjectConstructor();

_thisまた、ローカル変数を作成して割り当てる理由がなかったので、の作成も削除しthisました。

編集

私の意見では、2 番目のアプローチが好まれます。これは、オブジェクトを構築する JavaScript の組み込み機能を活用する、より従来のアプローチだからです。最初のアプローチは要点を逃しています。これは単純なオブジェクト リテラルを返す関数だからです。

于 2013-07-23T01:51:54.953 に答える
1

違いがあります。最初のコンストラクター関数は、次の 2 つの方法で呼び出すことができます。

var myObject = AnObjectConstructor();

また

var myObject = new AnObjectConstructor();

これは、最初のコンストラクター関数が返されたオブジェクトを手動で作成するためです。newオペレーターの場合、thisエンジンによって自動的に作成されたオブジェクトは、自分で作成したオブジェクトを返すときに事実上破棄されます。

ただし、2 番目のコンストラクター関数は、演算子を使用して呼び出すことに依存していますnew。を使用しないと、別のオブジェクトまたはグローバル空間である可能性newのある電流が汚染されます。this

于 2013-07-23T01:59:57.510 に答える