Javascript类声明范围混淆
我在最新的chrome控制台中运行下面的代码 我以为Javascript类声明范围混淆,javascript,scope,Javascript,Scope,我在最新的chrome控制台中运行下面的代码 我以为Test类将在root的范围内声明,因此我可以通过字符串访问构造函数,但事实并非如此。有人能解释一下,我如何用'Test'创建一个新实例吗 (() => { let root = this class Test {} console.log( root['Test'] ) })() (()=>{ 让root=this; 类测试{} 这个。测试=测试; 日志(根['Test']) })()您可以将该类附加到此,因为默认情况下
Test
类将在root
的范围内声明,因此我可以通过字符串访问构造函数,但事实并非如此。有人能解释一下,我如何用'Test'
创建一个新实例吗
(() => {
let root = this
class Test {}
console.log( root['Test'] )
})()
(()=>{
让root=this;
类测试{}
这个。测试=测试;
日志(根['Test'])
})()
您可以将该类附加到此
,因为默认情况下未附加该类。
然后您将能够作为对象属性访问它
见下面的代码:
(()=>{
this.Test=类测试{
姓名(){
返回“Hi 5”;
}
}
console.log('Name is',newthis['Test']().Name())
console.log('或使用窗口')
console.log('Name is',新窗口['Test']().Name())
})()
类声明不会被挂起。您还应该阅读arrow创建的词法范围functions@Dummy出于好奇,他们被添加到了什么范围?它们需要一个作用域,对吗?Test
将作用域限定为封闭的arrow函数,因为您使用了arrow函数,这称为词法作用域,但再次,因为您使用了arrow函数let root=this
将引用没有Test
作为成员的封闭实例。您能稍微解释一下您的答案吗?声明类测试不会将其绑定到当前上下文(此)。它只绑定到词法范围。如果要通过此访问它,则需要显式将其绑定到此。它与声明函数Test(){}完全相同。它不会绑定到“this”。除非您执行此.Test=Test或此.Test=function(){},否则如果类不在此
或窗口中,该类通常驻留在哪里?