.. Jestem nowy w JavaScript, czy ktoś może wyjaśnić, dlaczego ten kod nie działa?

var User = function () {
    var userId = 0;
    var clear = function () {
        userId = 0;
    }
    return{
        clear:clear,
        userId:userId,
    }
}

...
// in mocha test:

var john = new User();
john.userId = 666;
john.userId.should.equal(666); // true
john.clear()
john.userId.should.equal(0); // false

Pozdrowienia

0
t.joe 26 czerwiec 2017, 17:13

5 odpowiedzi

Najlepsza odpowiedź

To, co zrobiłeś, jest stworzenie Zamknięcie funkcji. Oznacza to, że w funkcji clear userId jest tworzona jako zmienna lokalna i jest oddzielnie zasilana z globalnej User.userId.

To, co musisz zrobić, jest użyj słów kluczowych this, aby określić userId, który próbujesz zmienić, jest globalny.

var User = function () {
    var userId = 0;
    var clear = function () {
        this.userId = 0;
    }
    return{
        clear:clear,
        userId:userId,
    }
}
1
rageandqq 26 czerwiec 2017, 14:20

Jest tu kilka problemów.

1: userId jest niezdefiniowany w definicji funkcji.

2: user jest niezdefiniowany, więc {x1}} jest również niezdefiniowany (właściwie, jestem zaskoczony, że Twój kod nie tylko się rozbija). Masz na myśli john.id i john.clear().

0
Jeremy Thille 26 czerwiec 2017, 14:23

Musisz użyć "tego", odwołując się do nieruchomości w czystej metodzie

var clear = function () {
    this.userId = 0;
}
0
Gareth Jordan 26 czerwiec 2017, 14:21

Brakuje tego słowa kluczowego.

var User = function () {
    var userId = 0;
    var clear = function () {
        this.userId = 0;
    }
    return{
        clear:clear,
        userId:userId,
    }
}
0
Martin Palmieri 26 czerwiec 2017, 14:19

Wracasz obiekt

 return{
    clear:clear,
    userId:userId,
}

Który nie ma własności identyfikacyjnej, ale identyfikator użytkownika.

0
Shadowfox 26 czerwiec 2017, 14:16