Javascript 对象何时完全定义?

Javascript 对象何时完全定义?,javascript,Javascript,我正在学习javascript,希望在一个对象中定义两个类。第二类派生自第一类 它看起来像: 让foo={ bar:(函数(){ 让bar_msg=''; 分类栏{ 构造器(msg){ bar_msg=msg; } } 返回杆; }()), baz:(函数(){ 让baz_msg=''; 类baz扩展了foo.bar{ 构造器(msg){ 超级(); baz_msg=msg; } } 返回baz; }()) };当您声明一个对象并为其赋值时,该对象已“完全”定义,如下所示: var foo =

我正在学习javascript,希望在一个对象中定义两个类。第二类派生自第一类

它看起来像:

让foo={
bar:(函数(){
让bar_msg='';
分类栏{
构造器(msg){
bar_msg=msg;
}
}
返回杆;
}()),
baz:(函数(){
让baz_msg='';
类baz扩展了foo.bar{
构造器(msg){
超级();
baz_msg=msg;
}
}
返回baz;
}())

};当您声明一个对象并为其赋值时,该对象已“完全”定义,如下所示:

var foo = 'bar';
您可以声明变量,但不能将其指定给任何值:

var foo;
当你试图访问它时,它会给你未定义的信息。还可以为未声明的变量赋值:

foo = 'bar';
javascript将自动创建一个全局变量
foo
。如果您试图访问从未声明或隐式声明过的变量(例如
foo='bar'
)。它会抛出一个错误

console.log(iDoNotExist); // will throw an error!
在您的第一个代码中,类baz无法在其自身范围内定位
foo
,因此它将转到全局范围。但是,由于它在全局范围中也不可用,并且既没有显式声明也没有隐式声明,因此它将抛出一个错误

在第二个代码中,您明确声明了
foo
,并将其分配给一个对象,并在其后面添加了一个属性
bar
。声明
foo
之后编写的任何代码都可以访问它,包括将属性
bar
指定给
foo
,其中名为
baz
的类尝试扩展
foo.bar
。如果尝试扩展
foo
foo.bar
的代码段写在
foo
的定义之后。它将抛出一个错误。例如,请参见下面的代码段:

类baz扩展了foo{
构造器(msg){
超级();
baz_msg=msg;
}
msg(){
返回baz_msg;
}
}
设foo={};

设b=newfoo.baz('hi!')我认为信息不够。因为我刚刚用代码再次测试:
let foo={bar(){console.log(typeof foo);}。当我调用
foo.bar()
时,它记录了:
object
。那么,你的答案是错的,你是在
foo
声明之外还是在声明内部调用foo.bar?尝试在foo中调用bar函数。当您尝试使用
foo
扩展类
baz
时,您将得到未定义的,同样的情况,该类尚未可用,因为它尚未声明。