Javascript 为什么在这里使用解构?
我在Odin项目上问了这个问题,我在那里遇到了它,并被引导去研究解构,我做到了。我理解正在发生的事情,但我不知道为什么会这样做。只需使用原始变量名而不使用反结构大括号,就可以得到相同的结果(请参阅我的jfiddle链接,其中我删除了反结构并得到了相同的结果)。当我被要求使用更多的代码、输入和复杂性来达到同样的效果时,我发现很难学到一些东西。在const Person中使用Javascript 为什么在这里使用解构?,javascript,destructuring,Javascript,Destructuring,我在Odin项目上问了这个问题,我在那里遇到了它,并被引导去研究解构,我做到了。我理解正在发生的事情,但我不知道为什么会这样做。只需使用原始变量名而不使用反结构大括号,就可以得到相同的结果(请参阅我的jfiddle链接,其中我删除了反结构并得到了相同的结果)。当我被要求使用更多的代码、输入和复杂性来达到同样的效果时,我发现很难学到一些东西。在const Person中使用return{sayName}和在const Nerd中使用const{sayName}=Person(name)有什么好处?
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
普遍的共识是,这是一个不好的解构示例,但我已经做得太深了,仍将尝试理解它 通过使用解构,可以向
Person
添加其他函数
例如,人需要跳跃:
const Person = (name) => {
const sayName = () => console.log(`my name is ${name}`)
const jump = () => console.log('I jumped') // new feature
return {sayName, jump} // jump can inserted into the object here and used externally
}
然后,正如评论中所指出的,把人变成书呆子的更好方法是:
const Nerd = (name) => {
// simply create a person and pull out the sayName function with destructuring assignment syntax!
const doSomethingNerdy = () => console.log('nerd stuff')
return {...Person(name) , doSomethingNerdy}
}
最后,Nerd可以被解构,Person和Nerd内部的所有功能都可以使用
我想这就是他们想要达到的目的。“奥丁项目”似乎是一个教学网站。我不确定这里有多少人(如果有的话)熟悉他们的课程。我最好的猜测是,他们现在想介绍这个概念,这样他们就可以在以后的教材中建立这个概念。但我真的不能说。不确定是否有人可以。当你为一些简单的事情使用一个强大的功能,如解构,它通常掩盖了该功能的有用性。当你继续在应该使用它的地方使用它时,它会变得非常有意义,这看起来像是继承。你可以有
Person
s,你可以有Nerd
s,每个人都有sayName()
函数,但只有Nerd才有dosomethinnerdy()
函数。。。虽然这也是一种非常奇怪的继承方式。我想这应该是一个解构的例子,但在作者的头脑中看起来更好。你说得对,这里没有意义。有很多很好的解构用例,但这不是其中之一。在原始代码中,这是一个不好的示例。您最好不要使用解构,因为您只返回一个函数。这也是我所能想到的。问题是,他们从未将此作为理由。以下课程不在此代码块上展开。感谢您的评论“通过使用destructuring,可以向Person添加额外的函数”,无需为了获得相同的行为而进行destructure。你展示的只是创建一个对象文字-除了语法与镜像的语法相似之外,基本上与解构赋值没有关系。第1行,你不向Person添加额外的函数。“Nerd
然后可以解构Person
,并使用sayName
和jump
”它也不能这样做,而是返回{…Person(name),doSomethingNerdy}
,而不分解任何内容。
const Nerd = (name) => {
// simply create a person and pull out the sayName function with destructuring assignment syntax!
const doSomethingNerdy = () => console.log('nerd stuff')
return {...Person(name) , doSomethingNerdy}
}