我在最新的chrome控制台中运行下面的代码。Javascript类声明范围混乱
我认为Test
类将在root
的作用域中声明,所以我可以通过字符串访问构造函数,但事实并非如此。有人能解释一下,我该如何创建一个新的实例'Test'
?
(() => {
let root = this
class Test {}
console.log(root['Test'])
})()
我在最新的chrome控制台中运行下面的代码。Javascript类声明范围混乱
我认为Test
类将在root
的作用域中声明,所以我可以通过字符串访问构造函数,但事实并非如此。有人能解释一下,我该如何创建一个新的实例'Test'
?
(() => {
let root = this
class Test {}
console.log(root['Test'])
})()
您可以将类附加到this
,因为它不是默认连接。 然后您将能够将其作为对象属性进行访问。
见下面的代码:
(() => {
this.Test = class Test {
name() {
return "Hi 5";
}
}
console.log('Name is ', new this['Test']().name())
console.log('Or using window ')
console.log('Name is ', new window['Test']().name())
})()
如果不在'this'或'window'中,类通常驻留在哪里? –
@AndrewRockwell检查此答案https://stackoverflow.com/a/37711826/5436486 – Tareq
(() => {
let root = this;
class Test {}
this.Test = Test;
console.log(root['Test'])
})()
你能解释一下你的答案吗? – yuriy636
声明类测试不会将其绑定到当前上下文(this)。它只是绑定到词汇范围。如果你想让它通过它,你需要明确地将它绑定到这个。 –
它与你声明函数Test(){}一样激动人心。它不会绑定到'this'。除非你这样做。Test = Test或this.Test = function(){} –
类的声明也没有** **得到悬挂。你还应该阅读由箭头函数 – Dummy
@Dummy创建的词法范围出于好奇,他们添加的范围是什么?他们需要一个合适的范围? –
'Test'将被限制在封闭的箭头函数中,因为您使用了箭头函数,这称为词法范围,但再一次,因为您使用了箭头函数'let root = this'将引用封闭的实例,而不是'Test'作为一个明显的成员 – Dummy