我可以在用函数创建的对象中获取 let 的值吗?

ste*_*675 3 javascript function object

我想更好地理解用函数创建的对象内部值的机制。

\n
let 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

And*_*rks 5

问题是,当您返回 时{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)