0

我有下一段代码:

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;一切正常。

有人愿意解释为什么吗?

谢谢

4

2 回答 2

2

这是指某物的所有者。请参阅这篇文章。其中 var 声明了一个局部变量。

在您的情况下,您想知道服务器是否已启动,因此您需要将“this”添加到您的状态功能中。

function status() {
    return this.isStarted;
}
于 2012-12-11T12:04:15.907 回答
0

长话短说。因为isStarted,当定义为 时this.isStarted = true,是当前对象的属性(JavaScriptthis关键字是指调用该函数的对象),在status函数中您必须将其作为this.isStarted.

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

于 2012-12-11T12:03:54.050 回答