4

JSオブジェクトを定義する2つの方法の違いを理解しようとしている相対的なJS初心者...

場合によっては、次のような「名前空間」オブジェクトまたは「ハンドラー」と呼ぶものの例を見てきました。

var example = {
  message: null,
  setup: function( message ) {
    example.message = message;
    alert( message );
  }
}

このようなものを使用して、いくつかの関連する機能をグループ化することがあります。私が電話をかければ、example('foo!')アラートメッセージが表示されると思います.foo!example.messagefoo!

私の最初の質問は、この種のオブジェクト (関数として定義されていない) とは何ですか?

私は自分のサイトでこのようなオブジェクトをよく使用します。ハンドラーとして、ajax インタラクションなどの一連のバインディングをセットアップます。Mozilla docs では、オブジェクトを関数として定義することが提案されているため、次のようになります。

var example = function( message ) {
    ....
}

2 番目の質問は、この種の (関数として定義された) オブジェクトとは何ですか?

2つの違いがよくわからないので、いくつかの問題があり、質問3が発生します。

オブジェクトを関数として定義する場合、オブジェクトがインスタンス化されたときにそれらを実行する必要がない場合、オブジェクトのプロパティをどのように定義しますか?

すなわち。私がこれを行う場合:

var example = function( message ) {
    alert('message');
}

example('foo!')次に、それがでアラートをトリガーすることを知っていfoo!ます。しかし、オブジェクトに他のプロパティやメソッドを定義して、後でアクセスしたり呼び出したりするにはどうすればよいでしょうか?

4

1 に答える 1

6

私の最初の質問は、この種のオブジェクト (関数として定義されていない) とは何ですか?

それはオブジェクトリテラル表記として知られています

2 番目の質問は、この種の (関数として定義された) オブジェクトとは何ですか?

それは関数式として知られています。

その他の読み物:

オブジェクトを関数として定義する場合、オブジェクトがインスタンス化されたときにそれらを実行する必要がない場合、オブジェクトのプロパティをどのように定義しますか?

thisキーワードを使用してプロパティを追加するか、次のようにプロパティを使用できますprototype

var example = function( message ) {
    alert('message');
    this.hello = function(){
        alert('hello'); 
    }
}

または

var example = function( message ) {
    alert('message');
}

example.prototype.hello = function(){ 
   alert('hello');
}

var e = new example('hello');
e.hello();

を使用する場合、キーワードをthis使用してオブジェクトをインスタンス化する必要があります。new


OOP に関する興味深い読み物:

于 2012-04-22T19:34:43.927 に答える