使用Revealing Module Pattern,为什么这个对象发生了变化?

时间:2016-05-29 16:55:09

标签: javascript design-patterns revealing-module-pattern

给出以下代码:

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而不是放置它,丑陋的代码中间?

1 个答案:

答案 0 :(得分:0)

此行为是由closure

引起的
  

闭包是指独立(自由)变量的函数   (在本地使用但在封闭范围内定义的变量)。   换句话说,这些功能“记住”其中的环境   他们被创造了。

_posx_posy在周围范围内定义,setPosition记住它。

顺便说一下,我认为应该删除init,您应该直接在构造函数中指定_posx_posy