2012-01-08 13 views
0

私はOO JSの学習を始めようとしています。簡単な質問が1つあります(実際の問​​題は簡単に解決しています)。javascriptオブジェクトのリテラルとjqueryそれぞれ

は基本的には、次の警告は、ちょうど、私はそれが3種類の警告ボックス

<body> 

    <div id="bob"> 
     <div>f</div> 
     <div>t</div> 
     <div>q</div> 
    </div> 

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
    <script> 
    $(document).ready(function() { 

     var Person = { 
      name: $('#bob div').each(
       function(){ 
        $(this).text(); 
       } 
      )     
     } 
     alert(Person.name); 

    }); 
    </script> 

</body> 

感謝任意の指導を返したい[Objectオブジェクト]を返します。

Adi。首都で始まるJavaScriptの名に(この場合には、Person)は通常(コンストラクタ関数のために、すなわち機能が予約されていること、

var Person = { 
    alertNames: function() { 
     $('#bob div').each(
      function(){ 
       alert($(this).text()); 
      } 
     ); 
    }; 
} 
Person.alertNames(); 

注意、しかし:

+0

あなたのコードは '$( '#bob div')。each(...)'の返り値を 'Person.name'に代入します。これはjQueryオブジェクトです。 –

答えて

0

は、おそらくあなたは、このような何かを行うことができますnewキーワードを使用して新しいインスタンスを作成するために使用されます)。これらは通常タイプと呼ばれ、クラスという名前は誤解を招きます。あなたが本当にオブジェクト指向のコードを作成したい場合は

、あなたはこのような何かを試みることができる:

var Person = function(name) { 
    var container = $('#' + name); 

    this.alertNames: function() { 
     $('div', container).each(
      function(){ 
       alert($(this).text()); 
      } 
     ); 
    }; 
} 
var bob = new Person('bob'); 
bob.alertNames(); 

推奨読書:

0

javascript alertあなたが返すものではありません。それはあなたが呼ぶものであり、警告をポップアップさせるものです。したがって、3つのアラートが必要な場合は、alert関数を3回呼び出す必要があります。現在、あなたはそれを一度だけ呼びます。

あなたが試みているのは、セレクタの結果を連結することだと思います。この場合、代わりに.eachの使用.map

var Person = { 
    name: $('#bob div').map(function() { 
     return $(this).text(); 
    }).get().join(',')     
}; 
alert(Person.name); 

もう一つの可能​​性は.eachコールバックの内側に警告を置くことです。

+0

コンテンツを連結したい場合は、 '.get()。join()'も追加する必要があります。 –

+0

@FelixKling、良い点。回答は考慮に入れて更新されました。 –

関連する問題