javascript更改对象变量引用

时间:2017-06-26 14:13:57

标签: javascript object reference


我是javascript的新手可以有人请解释为什么这段代码不起作用?

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

此致

5 个答案:

答案 0 :(得分:1)

您所做的就是创建function closure。这意味着在clear函数内部,userId被创建为局部变量,并且与全局User.userId分开作用。

您需要做的是使用this关键字指定您尝试更改的userId是全局关键字。

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

答案 1 :(得分:0)

您正在返回一个对象

 return{
    clear:clear,
    userId:userId,
}

没有id属性,但是userId。

答案 2 :(得分:0)

您缺少此关键字。

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

答案 3 :(得分:0)

在clear方法中引用属性时需要使用“this”

var clear = function () {
    this.userId = 0;
}

答案 4 :(得分:0)

这里有几个问题。

1:userId在函数定义中未定义。

2:user未定义,因此user.clear()也未定义(实际上,我对您的代码感到惊讶并且只是崩溃)。您的意思是john.idjohn.clear()