2017-07-03 112 views
0

我试图编写一个返回另一个函数的函数。我的目标是编写一个函数,它接受一个对象并返回另一个函数“search”。当我用键调用搜索函数时,我想从第一个函数中给出的对象返回该键的值。错误:调用另一个函数返回的函数时未定义函数

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

说我有一个对象:

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

如果我打电话propertyOf (me),我得到[功能:搜索]作为结果。当我打电话给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

这正是我想要做的,谢谢!只是为了澄清=>箭头的用法:我想用传统的符号来写,并且用函数的前两行代替:'propertyOf = function(object){return 0} {} {} '但我不再得到正确的输出,它只是说未定义。我在做什么错我的语法?为什么我不必把(键)作为第二个函数的参数? – Ana

+0

在函数顶部有'searchBob'的目的是什么? – Ana

+0

对不起还有一个问题,因为我正在通过此代码工作 - 是'propName'函数的名称?如果是这样,评估是否(key === propName)意味着什么?特别困惑,因为这是INSIDE函数,所以代码如何检查函数是否等于密钥? – Ana

相关问题