2017-07-07 57 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是最簡單的一個。