2017-07-03 2 views
0

別の関数を返す関数を記述しようとしています。私の目標は、オブジェクトを受け取り、別の関数 "search"を返す関数を書くことです。検索関数をキーで呼び出すと、そのキーの値を最初の関数で指定されたオブジェクトから戻したいと考えています。結果として:私は[検索機能]を取得し、私はpropertyOf (me)を呼び出す場合エラー:別の関数から返された関数を呼び出すときに、関数が定義されていません。

var me = {name: "Bob", age: 87} 

propertyOf = function(object) { 
    return search = function (key) { 
    for (key in object) 
     if (key === object.property){ 
      return object[property] 
     } 
    } 
    } 

は、私は、オブジェクトを持っていると言います。 search (age)に電話すると、検索が定義されていないというエラーが表示されます。検索したいオブジェクトを参照しながら、キーを使って 'inside'関数を呼び出すにはどうすればよいですか?

+0

http://jsbin.com/tubixusevi/1/edit?js,console - 私はあなたが記述問題を再現することはできません。本当の[mcve]を提供してください。 – Quentin

+1

脇に:戻り値を無視し、関数で作成されたグローバルを使用する場合、 'propertyOf'には何も返されません。 – Quentin

+0

* "key = object.property" *は** key == object.property ** – derloopkat

答えて

1

はこれをしようと考えてみましょう:

let bob = { 
    name: 'Bob', 
    age: 87 
}, 
searchBob; 

propertyOf = object => { 
    return propName => { 
    for (let key in object) { 
    if(key === propName) return object[key] 
    } 
    } 
} 

searchBob = propertyOf(bob); 

// Call it like this: 

console.log(searchBob('age')); // 87 
+0

これはまさに私がやろうとしたことです、ありがとう! =>矢印の使い方を明確にするために、私は従来の表記法で記述したいと思います。関数の最初の2行を次のように置き換えました: 'propertyOf = function(object){ return propName = function(){ 'しかし、私はもはや正しい出力を得ることはできません、それは単に定義されていません。私の構文が間違っていますか?なぜ、第2の関数のパラメータとして(キー)を入れなければならないのでしょうか? – Ana

+0

そして、関数の上に「searchBob」を置く目的は何ですか? – Ana

+0

私はこのコードを使っていますのでもう一度質問してください - 関数の名前は 'propName'ですか?もしそうなら、(key === propName)かどうかを評価することはどういう意味ですか?特に混乱しているのはそれが関数の中にあるからです。関数がキーと等しいかどうかをコードがどのようにチェックできるのでしょうか? – Ana

関連する問題