在理解js是如何工作的方面,我遗漏了一些东西。以下是问题所在:
我们像这样声明一个模块:
ns.obj = function() {
// declare private variables
var test = 1, test1 = 2;
// declare some private function
var myFunc=function(){test=2};
return{test:test, myFunc:myFunc};
}每次调用测试时,因为我们没有在函数中声明myFunc,所以js应该假设我们引用的是私有变量。
返回的对象确保我们有测试和myFunc可见,如果我们有模块。因此,调用ns.obj.test首先应该会得到1。在我们调用myFunc之后,应该给我们2。但它总是1。为什么会这样呢?
这是jsfiddle:http://jsfiddle.net/aXuwB/1/
发布于 2012-08-24 04:13:59
在JavaScript中,覆盖变量不会覆盖其他任何地方。您实际上是在返回对象中传递数字1;没有对test变量的引用。
你可以选择返回一个函数。函数包含代码,因此可以包含对变量的引用。调用它会得到一个变量:test: function() { return test; }。
发布于 2018-02-12 23:27:08
var User = function () {
var age = 0; // private
this.incrementAge = function () {
return age++;
}
return this.incrementAge(); // closure
};
var firstUser = new User();
console.log('firstUser', firstUser.incrementAge()); // 1
var secondUser = new User();
console.log('secondUser', secondUser.incrementAge()); // 1
console.log('secondUser', secondUser.incrementAge()); // 2发布于 2012-08-24 04:24:41
我认为这与每次执行函数时都要声明一个新的var test=1有关。需要说明的是,每次调用ns.obj()时,都会将一个新的测试变量重新赋值为1,然后在对象中返回它。因此,该值始终为1。
当您调用myFunc函数时,它将根据您的需要修改您的私有变量,但是您没有一种干净的方法来访问私有变量(无需重新设置该值)。
看一下这个,看看它是否演示了你想要的东西:
var ns = {};
ns.obj = function(){
var test = 1;
this.myFunc = function(){
test=2
};
this.getTest = function(){
return test;
}
}
var testObj = new ns.obj();
console.log(testObj.getTest());
testObj.myFunc()
console.log(testObj.getTest());https://stackoverflow.com/questions/12099191
复制相似问题