【发布时间】:2021-06-14 18:53:35
【问题描述】:
我在 The Odin Project 中遇到了这个问题,并被引导研究解构,我做到了。我了解正在发生的事情,但我不知道为什么要这样做。简单地使用没有解构大括号的原始变量名称会得到相同的结果(请参阅我的 jfiddle 链接,其中我删除了解构并得到相同的结果)。当我被要求使用更多的代码、打字和复杂性来达到相同的结果时,我发现很难学到东西。通过在 const Person 中使用 return {sayName} 和在 const Nerd 中使用 const {sayName} = Person(name) 可以获得什么好处?我在 jfiddle 中使用了 return sayName 和 const sayName 并得到了相同的结果。
原码:
const Person = (name) => {
const sayName = () => console.log(`my name is ${name}`)
return {sayName}
}
const Nerd = (name) => {
// simply create a person and pull out the sayName function with destructuring assignment syntax!
const {sayName} = Person(name)
const doSomethingNerdy = () => console.log('nerd stuff')
return {sayName, doSomethingNerdy}
}
const jeff = Nerd('jeff')
jeff.sayName() //my name is jeff
jeff.doSomethingNerdy() // nerd stuff
const Person = (name) => {
const sayName = () => console.log(`my name is ${name}`)
return sayName
}
const Nerd = (name) => {
// simply create a person and pull out the sayName function with destructuring assignment syntax!
const sayName = Person(name)
const doSomethingNerdy = () => console.log('nerd stuff')
return {sayName, doSomethingNerdy}
}
const jeff = Nerd('jeff')
jeff.sayName() //my name is jeff
jeff.doSomethingNerdy() // nerd stuff
【问题讨论】:
-
“奥丁计划”似乎是一些教学网站。我不确定这里有多少(如果有的话)用户熟悉他们的课程。我最好的猜测是他们现在想介绍这个概念,这样他们就可以在以后的教材中建立它。但我真的不能说。不知道有没有人可以。
-
当您将解构等强大功能用于简单的事情时,它通常会掩盖该功能的有用性。当你继续在应该使用它的地方使用它时,它会很有意义
-
嗯,这有点像继承。你可以有
Persons,也可以有Nerds,每个人都有sayName()函数,但只有书呆子才有doSomethingNerdy()函数......虽然这也是一种相当奇怪的继承方式。 -
我的猜测是这应该是一个解构的例子,但在作者的脑海中看起来更好。你是对的,这里没有意义。解构有很多很好的用例,但这不是其中之一。
-
在原始代码中,这是一个不好的例子。你最好不要使用解构,因为你只返回一个函数。