编辑:
这可能是一个重复的问题,但是,鉴于已经发布的示例,我在掌握解构对象的工作原理时没有找到能够解决中心问题的任何问题。
通过这里的动作,我可以进行足够深入的挖掘,以发现对象的解构不包括变量名的重新分配,这是我最初进行的假设,现在已在下面的代码中以注释的形式反映出来,继续为了说明的目的,在代码片段的上方,该代码片段分散了想法变量名称的重新分配。
我还修复了示例代码的功能部分,将函数包装在对象中作为键值,然后调用它。
这导致了两个新发现,这些发现是我对使用各种传递对象的方法对原型属性的可用性的期望与实现中的情况有何不同。
在第一种情况下,该函数的typeof被解构为与对象内部的键具有相同名称的变量,然后传递给另一个函数,解析为“未定义”。我以为它将解决“功能”。
我的另一个发现同样是奥术。简而言之,函数的调用需要使用参数大括号,在模块模式的应用中,尽管从技术上讲不是破坏性的,但私有方法中的一个对象的键可能会以新名称引用-无需大括号。这并不是要进行结构分解的重点,更重要的是语法要根据引用的形成方式灵活变化,正如我发现的那样,在头脑中清理出这些细节之前,这可能会造成混淆,还有更多,在做。
FWIW,我希望我对JS领域的了解对您有所帮助。
现在,我将尝试发现typeof如何报告其行为,我再次怀疑这与传递值的方法有关,从而使某些属性在运行时隐藏。
我在实际的工作代码中阅读的Javascript代码越多,表示法的怪癖就越似乎使我难以理解,这是我在文档中从未见过的。下面的示例来自node.js库http.js的顶部。
const { Object } = primordials;
但是,从何而来却无济于事,无法帮助我理解它的含义。它是如何工作的,或者由于它的工作方式而具有优势。
因此,我整理了一个浪费时间的东西(下图),希望这可以帮助我了解发生了什么事,但这比让我开始询问时更加困惑。
我的问题是双重的。像我介绍的那样,一种更不常见的调查我不了解的代码的方法是什么,第二部分,您能否解释一下该方法揭示了样本的含义和用法?
对我来说,可能的线索是错误消息,该消息与销毁有关,但似乎仍无济于事,而且到目前为止,走那条路还没有使我找到一种更简单的方法。没关系,当我弄混JS时,我对pydoc怀旧了吗?
在我的尝试评论中,我包括了一些半记得的记号,在我看来,这些记号是在我最流利,最受人尊敬的代码中发现的,因为它们包含在其中,因此在我不断发展的JS语法知识上,我很难理解。
// const { Object } = primordials;
// const y = {key: 'birthday', val: 99}
// const { x } = y
// simple(x) // undefined
// simple(y) // object y
const y = {val: 99, val2: 33, val3: 11, x: 1}
const { val3, x, val, val2 } = y
simple(x)
simple(val)
const n = 88
const { m } = n
simple(m) // undefined
simple(n) // 88
const q = {p: function (){console.log(77)}}
const { p } = q
simple(p()) // invoke destructured key's value -- '77' to console
simple(q) // function q
const b = null
// const { a } = b // error: Cannot destructure property `a` of 'undefined' or 'null'
// simple(a)
simple(b) // null
function simple (z) {
console.log(z);
}
// !!somevar = 'a_val'
// [someReference]