2017-01-27 13 views
0

初心者の質問はここにあります...私は機能的なパターンを使用して単純なスタックを構築しており、プッシュとポップアップの機能をキーとして返しています(私はこのことを望まない)...私は本当にありませんどうしてそうだ。関数はちょうどそれらの2つの余分なキーを返す、動作している...キーとして返される関数

これはリターンがどのように見えるかですが...

{ size: 2, 
    storage: { '1': 'test0', '2': 'test1' }, 
    push: [Function], <== don't want 
    pop: [Function] } <== don't want 
[Finished in 0.1s] 


function Stack() { 

    var obj = {}; 

    obj.size = 0; 
    obj.storage = {}; 

    obj.push = function(data) { 
     var newSize = ++obj.size; 
     obj.storage[newSize] = data; 
    }; 

    obj.pop = function() { 

     var newSize = obj.size; 
     var deletedData; 

     if (newSize) { 
      deletedData = obj.storage[newSize]; 

      delete obj.storage[newSize]; 
      obj.size--; 

      return deletedData; 
      } 
     }; 
     return obj; 
    }; 


var stack = new Stack(); 


stack.push('test0') 
stack.push('test1') 
stack.push('test2') 
stack.pop() 

console.log(stack) 

答えて

0

あなたは「明らかに」あなたは、オブジェクトがキーを含めたくないと言います機能のために、しかし私はそれがそれほど明白でないことを私に推測する...それであなたは結局何をしたいですか? JavaScriptでは、関数参照はちょうど別のデータであり、メソッドはオブジェクト上のあるキーの値として格納されている単なる関数参照です。

ユーザーがobj.push(...)を言うことができるようにしたい場合は、(()オペレータができるように、(obj.pushが何かを意味するように)あなたがobjpushキーをしたいですか、そしてあなたは、その値が関数になりたいですそれに適用される)。

出力ブロックでキーがxPushxPopであると言われていますが、それらはコードブロックに表示されている値ではないため、私は不思議です。それは質問の編集のためですか?そうでない場合、私はそれがどのようにあなたがそれを示したのかを見ることができません。

+0

私はxPushとxPopを固定しました...私はコードを使って遊んでいましたが、間違ったリターンでコピーしました...多分あなたの権利、多分それは明らかではないでしょう。私は私の質問は、なぜ彼らのそれぞれの関数のプロパティでプッシュとポップキーを返すと思いますか?私はこれを記録し、さらに彼らが実際にどのように作成されているのかを見ていると思います...私は実際にそれらを返す理由についてちょっと混乱しています。 –

+0

どのように作成されますか?さて、あなたは 'obj.push = function(data){...}'と言うので、関数参照を作成し、それを 'obj'のキー' push'に割り当てます。あなたが返すオブジェクト( 'obj')には、これらのキーが割り当てられているため、これらのキーがあります。おそらくそれらのメソッドを 'Stack'に置くことを意味しましたか? –

+0

ああ...ありがとう! –

関連する問題