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

これは何かの所有者を指します。これについては、この記事を参照してください。as 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 に答える