stampit.js“状态”对象不是实例安全的

stampit.js `state` objects not instance-safe

本文关键字:实例 安全 对象 js 状态 stampit      更新时间:2023-09-26

你好JavaScripter。

我最近开始弄乱 stampit.js 库,作为研究 JavaScript 中不同继承方法的一种方式。

我的

问题是关于我的state对象(在我的示例中有两个),每个状态对象都被分配了一个不同的值("第一"和"第二"),但我的第一个状态对象似乎想从我的第二个状态对象复制值,据我所知,这不是我应该从 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"

那么我在这里错过了什么?

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

您可以在项目的 github 帐户上看到,该问题首先在此处打开(和关闭),然后在此处再次重新打开。

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

来自库作者的引述,代表您的预期行为:

状态原型在创建实例时进行深度复制,这 意味着如果创建一个实例,则更改状态原型, 然后创建一个新实例,新实例将具有不同的状态 比第一个实例。

这是设计使然。

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

~

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

更新(2015 年 1 月 15 日):您可以在此处关注 2.0 分支的进度,该分支声称正在解决这些问题。以下是一位项目维护者的引述(来源):

将修复 排名 #43 in 版本 2.0. 请参阅分支v2_0。