2017-07-07 58 views
2

如何将这段代码转换为而不是使用胖箭头?将胖箭头转换为标准符号

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

我改变了第一线,

propertyOf = function (object) { 

和代码仍然工作。当我也改变第二行

return propName = function() { 

当我试图调用函数时出现错误,说“未定义”。我在第二行旁边还有一个错误,说'你是不是要运行条件而不是分配?'

完整的代码是这样的:

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); 



console.log(searchBob('age')); 

回答

5

return propName => {,PROPNAME是该函数的参数,所以将其转换为

return function(propName) { 

documentation of the arrow function,它被指定,当存在只有一个参数,括号可以省略。

1

我会做这种方式:

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

propertyOf = function (person,propName) { 

    for (let key in person) { 
     if(key === propName) return person[key] 
    } 

} 

searchBob = propertyOf(bob, "name"); 
2

我想指出的是,你已经尝试了片段使用

return propName = function() { 

有效的JavaScript。您得到undefined,因为propName变量在您的内部函数中是未定义的。因此,if条件在for..in循环非常转化为

if (key === undefined) // This never passes, hence undefined is returned 

您的代码将工作如果您将其更改为

return propName = function(propName) { 

全部工作示例:

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

 
propertyOf = function(object) { 
 
    return propName = function(/* This is the only change */ propName) { 
 
    for (let key in object) { 
 
     if (key === propName) return object[key] 
 
    } 
 
    } 
 
} 
 

 
searchBob = propertyOf(bob); 
 

 
console.log(searchBob('age'));

这就是说,我没有看到你应该这样做的任何理由。 This answer是最简单的一个。