Javascript 对象何时完全定义?
我正在学习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 =
让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
时,您将得到未定义的,同样的情况,该类尚未可用,因为它尚未声明。