ste*_*675 3 javascript function object
我想更好地理解用函数创建的对象内部值的机制。
\nlet createCounter = function(init) {\n let ans = init\n return {\n increment(){return ++ans},\n decrement(){return --ans},\n reset(){return ans = init},\n ans,\n }\n};\nmyob1=createCounter(3)\nmyob2=createCounter(10)\nconsole.log(myob1.increment()) // 4\nconsole.log(myob2.increment()) // 11\nconsole.log(myob1.ans) // 3\nconsole.log(myob2.ans) // 10\n
Run Code Online (Sandbox Code Playgroud)\n创建对象后,“ans”属性的值是否保持不变?\n我可以在此语法中直接获取它的当前值吗?
\n据我了解,let 的值在创建后与每个对象绑定,当我尝试使用对象属性获取它的值时,它只是诉诸“ans=init”并显示起始值?\nBTW刚开始学习JS,请不要生我的气:\xd0\xb7
\n问题是,当您返回 时{ans}
,这相当于写入{ans: ans}
,其中第二个ans
引用 ans 的当前值。
这意味着当您稍后为 分配不同的值时ans
,该对象{ans}
仍然引用初始值。
要解决此问题,请使用 getter。改成{ans}
这样{get ans() {return ans}}
:
let createCounter = function(init) {
let ans = init
return {
increment(){return ++ans},
decrement(){return --ans},
reset(){return ans = init},
get ans() {return ans},
}
};
myob1=createCounter(3)
myob2=createCounter(10)
console.log(myob1.increment()) // 4
console.log(myob2.increment()) // 11
console.log(myob1.ans) // 4
console.log(myob2.ans) // 11
Run Code Online (Sandbox Code Playgroud)