javascript更改对象变量引用
javascript更改对象变量引用,javascript,object,reference,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(); joh
我是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
关于您正在返回一个对象
return{
clear:clear,
userId:userId,
}
它没有id属性,但有userId。您缺少this关键字
var User = function () {
var userId = 0;
var clear = function () {
this.userId = 0;
}
return{
clear:clear,
userId:userId,
}
}
您所做的就是创建一个。这意味着在
clear
函数中,userId
被创建为局部变量,并与全局User.userId
的作用域分开
您需要做的是使用this
关键字指定您试图更改的userId
是全局ID
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.id
和john.clear()。然后继续引用一个名为user
user.id
和id
的未声明变量。一个是其他语言所称的public
,而另一个是private
。它们可能共享名称,但指向不同的内存位置。抱歉,输入错误。更新了问题。我为你做了一把小提琴。var john=new User(),然后u引用用户?try john.clear()在定义用户“类”之前尝试删除var。只需执行User=function(){},尽管var userId=0代码>是多余的。@Sirko如果没有它,代码将出错(至少在我的运行时)!请参阅控制台中的错误:确保它会发生,因为返回的对象中存在引用。你必须直接在那里设置零。啊,我误解了-你说在那个地方初始化是没有意义的。在这个例子中,有两个指向同一个值的指针是没有意义的,是的。我认为这两个都是打字错误-提问者编辑了他的问题以反映这一点。事实上,当我键入答案时。OP问为什么他们的代码不起作用,但发布了一些充满拼写错误的内容。。。。。。。。。