'这个'的价值之间的差异在客户端和服务器端的JavaScript

时间:2014-12-06 00:25:19

标签: javascript node.js

编写一些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();

由于

2 个答案:

答案 0 :(得分:3)

实际上,node.js在这里表现正确,因为你没有构建一个类,只是在没有任何this上下文的情况下调用它的构造函数。要创建类的新实例,您应始终使用new运算符:

new myClass();

行为上的差异是由strict mode引起的,因为在严格模式下,出于安全考虑,this is not referencing the global object by default

答案 1 :(得分:1)

这种行为是由此引起的:

'use strict';

如果在客户端使用该代码,则会产生相同的行为。