stampit.js`state`对象不是实例安全的

时间:2015-01-14 10:00:44

标签: javascript stampit.js

Hello JavaScripters。

我最近开始讨论stampit.js库,以此来研究JavaScript中的不同继承方法。

我的问题是关于我的state个对象(我的例子中有两个),每个状态对象被赋予不同的值(“first”和“second”),但我的第一个状态对象似乎想要从我的第二个状态对象中复制该值,据我所知,这不是我应该从stampit.js中得到的行为。通过stamp.create()时,我的状态对象不应该是唯一的吗?

以下是我的例子:

var stamp = require('stampit')();
var state = { x: { y : null } };

state.x.y = "first";
var example1 = stamp.create(state);
state.x.y = "second";
var example2 = stamp.create(state);

// These are the same, but shouldn't they be different?
console.log(example1.a.b); // prints "second" 
console.log(example2.a.b); // prints "second"

那我在这里错过了什么?

1 个答案:

答案 0 :(得分:1)

在撰写本文时,stampit.js库中存在一个错误。

您可以在项目的github帐户中看到问题首先是opened (and closed) here,然后是reopened again here

似乎他们正在努力解决这个问题,但是你是对的,你应该为你的两个不同的示例对象获得两个不同的状态值,因为状态应该是"实例安全。"

来自图书馆作者的引用,表示您的预期行为:

  

状态原型在实例创建时被深度复制,其中   意味着如果你创建一个实例,那么改变状态原型,   然后创建一个新实例,新实例将具有不同的状态   而不是第一次。

     

这是设计的。

所以紧紧抓住!这应该很快修复!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

更新(2015年1月15日):您可以 follow the progress of the 2.0 branch here ,声称正在解决这些问题。以下是其中一个项目维护者(source)的引用:

  

将修复   版本中#43   2.0。见分支v2_0