2

これら 2 つの方法を使用してオブジェクトを作成することの基本的な違いと、オブジェクトを使用した場合の効果を知る必要があります。

//////////////////////////////////////////
myTestObject.prototype.var1 = null;
function myTestObject()
{
    this.var1 = "test me";
}

myTestObject.prototype.action = function()
{
    alert("alertme");
};
// to use
var a = new myTestObject();
a.action();
//////////////////////////////////////////


//////////////////////////////////////////
(function()
{
    $.myTestObject3 = {
      var1 : "test me",
      action : _actionMethod
    };

    function _actionMethod()
    {
        alert("alertme3");
    }

 })();


$.myTestObject3.action();
//////////////////////////////////////////

いくつかの更新...この質問への回答により、さまざまなキーワードをグーグルで検索し、JavaScriptのコンストラクターとリテラルオブジェクトについて実際に詳細に説明した2つの興味深い記事につながりました

http://net.tutsplus.com/tutorials/javascript-ajax/the-basics-of-object-directional-javascript/

次に、関数コンストラクターを使用するときにプロトタイプを使用する理由のセグエとして、プロトタイプの使用が優れている理由に関するセクションに特に注意を払います。

http://net.tutsplus.com/tutorials/javascript-ajax/prototypes-in-javascript-what-you-need-to-know/?search_index=1

したがって、フォローアップとして、以下のギターの例のように 2 つの組み合わせを使用することをお勧めします。オブジェクトのコピーが 1 つだけ必要で、その変更がスクリプト全体に影響することがわかっている場合は、オブジェクト リテラルで問題ありません。ただし、プロトタイプ アプローチを使用して多くのオブジェクトを作成する必要がある場合は、作成されたすべてのオブジェクトが関数のコピーではなく、同じ関数への参照を使用するのが最適です。

名前空間をより有効に活用し、これらすべてのアプローチを組み合わせるための別の良い記事 http://javascriptweblog.wordpress.com/2010/12/07/namespacing-in-javascript/

LAST FOLLOW-UP これらのトピックが私をしばらくループさせたので、他の人がこれを役に立つと思うことを願っています.

今何を探すべきかを知っていたので、多くのデザインパターンと、いくつかの例を使用してJavaScriptでそれらを組み合わせる方法を説明する2つの非常に優れたURLを見つけました.

これは、プロトタイプ表記法を利用する方法でモジュール パターンを使用する方法を説明します。これにより、インスタンスが同じオブジェクトを参照していることを確認しながら、コードを区分化できます。 http://briancray.com/posts/javascript-module-pattern/

これは、いくつかの設計パターンを通過し、長所と短所をリストします http://addyosmani.com/resources/essentialjsdesignpatterns/book/

4

2 に答える 2

1

を使用しているオブジェクトは、jQuert プロトタイプで拡張されていないため$使用できません。オブジェクトリテラルであり、コンストラクター関数ではありません。myTestObject3myTestObject3

$('#test').myTestObj3.action(); // wrong

jQuery のプロトタイプに載せたい場合は、$.fnオブジェクトを拡張します。

myTestObjectプロトタイプの継承を使用して、(コンストラクターから) 任意の量の「子」を派生させることができます。

于 2012-10-31T12:19:54.437 に答える
1

JavaScript プロトタイピングとはなぜですか? をご覧ください。、そこからいくつかの抜粋:

すべてのプロパティとメソッドをオブジェクト関数コンストラクターに追加し、そのオブジェクトの 100 個のインスタンスを作成すると、すべてのプロパティとメソッドの 100 個のコピーが得られます。代わりに、オブジェクト関数コンストラクターのプロトタイプにすべてのプロパティとメソッドを追加し、そのオブジェクトの 100 個のインスタンスを作成すると、オブジェクトのプロパティとメソッドの単一 (1) コピーへの 100 個の参照が得られます。これは明らかに高速で効率的であり、プロトタイプが使用される理由です (以下で説明するように、文字列や画像などを変更することは別として)。

プロトタイプを使用するもう 1 つの理由は、従来の継承をエミュレートすることです。

var Instrument = {
    play: function (chord) {
      alert('Playing chord: ' + chord);
    }
};

var Guitar = (function() {
    var constructor = function(color, strings) {
        this.color = color;
        this.strings = strings;
    };
    constructor.prototype = Instrument;
    return constructor;
}());

var myGuitar = new Guitar('Black', ['D', 'A', 'D', 'F', 'A', 'E']);
myGuitar.play('D5');
于 2012-10-31T12:21:46.000 に答える