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"
那我在这里错过了什么?
答案 0 :(得分:1)
您可以在项目的github帐户中看到问题首先是opened (and closed) here,然后是reopened again here。
似乎他们正在努力解决这个问题,但是你是对的,你应该为你的两个不同的示例对象获得两个不同的状态值,因为状态应该是"实例安全。"
来自图书馆作者的引用,表示您的预期行为:
状态原型在实例创建时被深度复制,其中 意味着如果你创建一个实例,那么改变状态原型, 然后创建一个新实例,新实例将具有不同的状态 而不是第一次。
这是设计的。
所以紧紧抓住!这应该很快修复!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
更新(2015年1月15日):您可以 follow the progress of the 2.0 branch here ,声称正在解决这些问题。以下是其中一个项目维护者(source)的引用: