0
function name( elements ){

    init( elements );

    var ret = {
        add : function( more ){
            $.extend(elements, more);
            init( more );
        }
    }

    function init( el ){
        $.each(el,function(name, selector){
            //some stuff....
        });
    }

    return ret;
}

私はこの構造(私が自分で作成したもの)を非常に使用しています...オブジェクトを使用せずにこのように考えるのは非常に単純で良いことです:

var reference = name({ one : $('#one'), two : $('#two') });

//and in a second moment...
reverence.add({ three : $('#tree') });

これは良い習慣ですか、そうではありませんか?オブジェクトとインスタンスを使用する方が良いですか?なぜ?

4

2 に答える 2

1

私の意見では、コンストラクターとプロトタイプ (JavaScript の従来のクラスに相当するもの) は、より読みやすく保守しやすいコードにつながります。あなたの例を3回読んで、それが何をしているのかを理解する必要がありました(基本的に、「追加」メソッドで辞書構造を作成しています)。

プロトタイプはより javascript 的であり、一般的でよく知られているパラダイムを使用します。また、他の人や 2 年後のあなたが振り返って理解するのははるかに簡単です。

以下がどれほど読みやすいか考えてみてください。

/** @constructor */
function Name(elememts) {
    this.elements = this._init(elements)
}

Name.prototype.add = function(more) {
    $.extend(this.elements, this._init(more));
}

Name.prototype._init = function(elements) {
    // some stuff...
}

あなたのメソッドは、プライベート関数を隠すという利点があります。従来のプロトタイプ継承では「private」キーワードがないため、オブジェクト自体の外部からプライベート メソッドを呼び出さないように注意する必要があります。(Google の Closure Compiler には @private アノテーションがあり、それを強制するのに役立ちますが、完全なシステムではありません。)

于 2013-03-10T20:56:26.150 に答える
0

クロージャーを使用することをお勧めします...それらはjavascriptで強力なものです... :)

var status = function (status) {
return {
get_status: function ( ) {
return status;
}
};
};

// Make an instance of status.
    var myStatus = status("amazed");
    document.writeln(myStatus.get_status( ));
于 2013-03-10T20:57:13.200 に答える