天使と悪魔選手権

・本文ではなく、returnへほとんどの処理を記述しているコードがあります
・どういう意図があるのでしょうか?

・複数の関数をreturnする関数が、たくさんあります
・どの関数も、関数本文より、returnする関数内容の方が何倍も多いです

hoge = function(){
 //中略
  return {
   a : function(){
  },
   b : function(){
 //これが延々続く
 //return関数内で即時関数実行したり


■質問1
・処理の結果をreturnすると思っていたのですが、returnメインでそこに処理を記述していくやり方のメリットは?


■質問2
・hoge.aでアクセスしているのですが、関数定義=オブジェクト定義でしょうか?
・下記aメソッドは、同じ意味?

hoge = {
 a: function(){


hoge = function(){
 //中略
  return {
   a : function(){
  },

A 回答 (1件)

>・処理の結果をreturnすると思っていたのですが、returnメインでそこに処理を記述していくやり方のメリットは?



これは、勘違いをしています。return { a:function(){……} } というのは、結果をreturnしているのです。このa:function……というのは、処理ではなく「関数オブジェクト」です。

この{……}という書き方は、JSON形式によるオブジェクトリテラルです。つまり、オブジェクトを値として記述したものです。長くて内部に関数処理などが書かれていますが、それらもすべて「値」なのです。オブジェクトを結果としてreturnする際には、こうした書き方になってしまう、ということです。

>・hoge.aでアクセスしているのですが、関数定義=オブジェクト定義でしょうか?

この場合のaは、hogeオブジェクトのメソッドですね。aの関数定義そのものもオブジェクトです。JavaScriptでは、関数はFunctionオブジェクトというオブジェクトですから、関数を値として設定したものはすべてオブジェクトです。

>・下記aメソッドは、同じ意味?

hoge = {
 a: function(){

これは、hogeオブジェクト内にaというプロパティを用意し、それに関数オブジェクトを設定しています。つまり、aというメソッドをオブジェクト内に用意しています。

hoge = function(){
 //中略
  return {
   a : function(){
  },

これは、aというメソッドを持つオブジェクトをreturnする関数オブジェクトをhogeに代入しています。

最終的にhoge.a()と使う場面においては同じですが、後者の場合、hoge()とすることでaメソッドを持つオブジェクトを返すことができます。前者は関数オブジェクトではなく一般的なオブジェクトがhogeに設定されていますからhoge()することはできません。

おそらく、{……}という記述がオブジェクトの記述であるということ、関数は基本的にオブジェクトであるということをしっかり理解すれば、これらの記述もわかってくると思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
大変参考になりましたー

お礼日時:2014/09/01 12:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!