给出以下代码:
var house = new House(3,4);
如果我创建一个新的House对象:
house.setPosition(100,50);
并使用setPosition方法更改位置:
console.log(house.posX + ',' + house.posY); // 100,50 (why not 3,4?)
我预计房子的位置仍然是3,4 ..但它却发生了变化(这实际上是我想要的,但我不明白这是怎么回事?)我不理解它因为Javascript已经返回了3,4的位置,我希望它一直都是这样,即使我使用set方法改变位置。
{{1}}
Bonus问题:有没有一种正确的方法来执行init而不是放置它,丑陋的代码中间?
答案 0 :(得分:0)
此行为是由closure。
引起的闭包是指独立(自由)变量的函数 (在本地使用但在封闭范围内定义的变量)。 换句话说,这些功能“记住”其中的环境 他们被创造了。
_posx
和_posy
在周围范围内定义,setPosition
记住它。
顺便说一下,我认为应该删除init
,您应该直接在构造函数中指定_posx
和_posy
。