2017-03-15 26 views
0

以下のコードは機能しませんが、私の考えは関数を一つの関数にラップし、paramで親関数を呼び出すことです。 paramは、その子関数によって使用されます。関数を関数javacript内に配置

あなたは、機能としてのあなたの機能をマーク、内側 elemパラメータを削除し、関数を含むオブジェクトを返す必要が
_abc(elem){ 
    a(elem){ 
    return elem + 'a'; 
    } 
    b(elem){ 
    return elem + 'b'; 
    } 
} 

_abc(elem).b() // doesn't work? 
+0

あなた '_abc'一般に「コンストラクタ関数」と呼ばれる。それはあなたが何を返すべきかを見るのに役立ちますか? – 4castle

答えて

1

function _abc(elem){ 
 
    function a(){ 
 
    return elem + 'a'; 
 
    } 
 
    function b(){ 
 
    return elem + 'b'; 
 
    } 
 
    
 
    return { a:a, b:b }; 
 
} 
 

 
console.log(_abc('hello').b());

せずに、この本を書くための別の方法を複数の関数名を繰り返します。

function _abc(elem){ 
 
    return { 
 
     a: function() { 
 
      return elem + 'a'; 
 
     }, 
 
     b: function() { 
 
      return elem + 'b'; 
 
     } 
 
    }; 
 
} 
 

 
console.log(_abc('hello').b());

そしてもう一つは、@ 4castleによって示唆されているように。この1は、唯一のECMAScript 6のサポートのJavaScript環境でサポートされています。

function _abc(elem){ 
 
    return { 
 
     a() { 
 
      return elem + 'a'; 
 
     }, 
 
     b() { 
 
      return elem + 'b'; 
 
     } 
 
    }; 
 
} 
 

 
console.log(_abc('hello').b());

+0

ES6では(OPが試みている構文を使っていると思われますが)、[メソッド短縮形](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Method_definitions)を参照してください。 – 4castle

+0

@ 4castleありがとうございます。私はその構文について知らなかったが、私はOPが故意にES6を対象としているとは考えていない。 – JLRishe

+0

'return {a:b:b}'ではなくes6で 'return {a、b}'を実行できますか? – Mellisa

0

あなたは私がそうのように、Javaのオブジェクト指向を探しているかもしれません:

function _abc(elem) 
{ 
    this.elem = elem; 

    this.a = function() 
    { 
     return this.elem + 'a'; 
    } 

    this.b = function() 
    { 
     return this.elem + 'b'; 
    } 
} 

console.log(new _abc('Hey ').a()); 
+0

さて、それをfooという名前にしましょう –

+0

@AlvaroRoman "_abc"という名前はどうですか? – JLRishe

+0

私は本当にそれが好きではないが、fiiiiiiine、_abcです –