我是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
此致
答案 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.id
和john.clear()
。