这两个陈述有什么区别?它们提供不同的输出(在谷歌Chrome控制台中)。
function Test() {
if (this instanceof Test) {
} else {
return new Test();
}
}
x = Test();
测试{}
function Test() {
if (!this instanceof Test) {
return new Test();
}
}
x = Test();
未定义
Mind = boggled
答案 0 :(得分:6)
问题是!
在instanceof
之前进行评估,因此被视为:
if ((!this) instanceof Test) { ... }
而且,!this
是true
还是false
,这两个值都不是instanceof Test
,阻止了new Test()
的返回。
添加分组会强制“不是实例”所需的顺序:
if (!(this instanceof Test)) { ... }