繁体   English   中英

javascript更改对象变量参考

[英]javascript change object variable 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

问候

您要做的是创建一个函数闭包 这意味着在clear函数中, userId被创建为局部变量,并与全局User.userId分开范围。

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

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

您正在返回一个对象

 return{
    clear:clear,
    userId:userId,
}

没有id属性,但有userId。

您缺少此关键字。

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

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

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

这里有几个问题。

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

2: user未定义,所以user.clear()也未定义(实际上,我很惊讶您的代码不仅崩溃了)。 您的意思是john.idjohn.clear()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM