gpt4 book ai didi

Javascript:父/子对象实例化的顺序

转载 作者:行者123 更新时间:2023-12-03 11:07:10 29 4
gpt4 key购买 nike

我是 JavaScript 新手,想了解更多有关它实例化父/子对象的顺序的信息。更具体地说,我想从编译器/浏览器的 Angular 理解以下代码片段。

var parent = {
child: {
field1: "value1",
field2: "value2"
},
someOtherField: parent.child.field1, // => Error
someOtherField: this.child.field1 // => Error
};

上面代码片段中的两个 Error 行都会生成相同的错误

Uncaught TypeError: Cannot read property 'field1' of undefined

因此,当浏览器查看 someOtherField 行时,parent.child 仍然是 undefined,因此 parent.child .field1 是非法的。有人可以分享一些关于为什么会发生这种情况的见解,以及浏览器尝试使用上述代码片段运行的确切指令顺序是什么?谢谢!

最佳答案

在代码中(一次处理一个问题):

var parent = {
child: {
field1: "value1",
field2: "value2"
},
someOtherField: parent.child.field1 // => Error
};

在执行任何代码(所谓的“提升”)之前,将创建变量 parent 并将其初始化为 未定义。一旦执行开始,对渐进结果的检查似乎是首先将对象分配给,然后解析内部属性。

所以第一条错误消息如下:

TypeError: undefined is not an object (evaluating 'parent.child.field1')

因为parent是一个对象。从这个结果中无法判断 parent 是否有 child 属性,因为它可能有一个 child 属性初始化为 undefined,或者它可能根本没有子属性。无论哪种方式,parent.child 都会解析为未定义,并且尝试解析未定义的属性会返回类型错误。

请注意:

var parent = {
one: 'one',
two: parent.one
}

console.log(parent.one, parent.two) // one undefined

可以看出,在给parent.two赋值时,parent.one未定义。

至于:

  someOtherField: this.child.field1

this 的值将是全局对象(浏览器中的窗口),并且它没有 child 属性,因此您会收到类似的错误:

TypeError: undefined is not an object (evaluating 'this.child.field1')

由于没有全局 child,因此 this.child 返回 undefined 并尝试解析 undefined 的属性em> 抛出类型错误。

另请注意:

  someOtherField: this.parent.child.field1

相当于:

  someOtherField: parent.child.field1

并抛出相同的错误。

最重要的是,您不应尝试分配部分完成的对象的属性。我确信 ECMA-262 中有合适的引用资料,需要一些时间才能找到它。

关于Javascript:父/子对象实例化的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27791429/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com