2012-12-11 41 views
0

我的下一段代码:差异的NodeJS

function Server() { 
    this.isStarted = false; 
// var isStarted = false; 

    function status() { 
     return isStarted; 
    } 

    console.log(status()); 
} 

var a = new Server() 

当我运行它,我得到

ReferenceError: isStarted is not defined 
    at status (/a/fr-05/vol/home/stud/yotamoo/workspace/ex4/text.js:7:10) 
    at new Server (/a/fr-05/vol/home/stud/yotamoo/workspace/ex4/text.js:10:14) 
    at Object.<anonymous> (/a/fr-05/vol/home/stud/yotamoo/workspace/ex4/text.js: 

但是,如果我改变this.isStarted = false;var isStarted = false;一切工作正常。

有没有人关心解释为什么?

谢谢

回答

0

长话短说。由于isStarted定义为this.isStarted = true是当前对象的属性(JavaScript this关键字指的是函数被调用的对象),因此在status函数中,您将必须以this.isStarted的身份访问它。

将它声明为变量(var)是不同的。从技术上讲,isStatus将成为隐藏的词汇范围对象的属性。您必须在整个Server函数体中以及所有子函数中访问它,仅为isStatus

2

这向有关东西的所有者做出反应。关于此请参见article。作为var声明一个局部变量。

就你而言,你想引用知道服务器是否启动,所以你需要添加'this'到你的状态函数。

function status() { 
    return this.isStarted; 
}