编写一些nodejs测试程序,并遇到一些意想不到的怪癖。在浏览器中,当我说console.log(this);
并且它不在函数中时,它是window.object。我知道nodejs有一个全局对象但是当我做console.log(这个)时我只得到一个空对象。然后当我在我创建的函数中询问'this'的值时,我得到undefined
。我希望得到一个对当前函数的引用(myClass,在这种情况下)这里发生了什么?
请参阅我的以下nodejs程序:
'use strict';
var log = console.log;
log(this); //empty object
function myClass() {
log (this); //undefined
this.variable = 3; //exception, cannot set property 'test' of undefined
}
myClass();
由于
答案 0 :(得分:3)
实际上,node.js
在这里表现正确,因为你没有构建一个类,只是在没有任何this
上下文的情况下调用它的构造函数。要创建类的新实例,您应始终使用new
运算符:
new myClass();
行为上的差异是由strict mode引起的,因为在严格模式下,出于安全考虑,this
is not referencing the global object by default。
答案 1 :(得分:1)
这种行为是由此引起的:
'use strict';
如果在客户端使用该代码,则会产生相同的行为。