Vuex状态内的Javascript类中缺少方法

Vuex状态内的Javascript类中缺少方法,javascript,oop,nuxt.js,vuex,Javascript,Oop,Nuxt.js,Vuex,我在Vuex旁边使用Nuxt framework在我的网站中存储数据,但当我想在状态中直接使用类时,我遇到了麻烦 模型cart.js定义如下: export class Cart { constructor(ownedID) { this._created = new Date(); this._lastUpdated = new Date(); this._ownerID = ownedID || 'visitor' t

我在Vuex旁边使用Nuxt framework在我的网站中存储数据,但当我想在状态中直接使用类时,我遇到了麻烦

模型
cart.js
定义如下:

export class Cart {

    constructor(ownedID) {
        this._created = new Date();
        this._lastUpdated = new Date();
        this._ownerID = ownedID || 'visitor'
        this._items = []
    }

     getItem (articleNumber) {
          console.log(this._items)
    }

    ...
}
和我的商店的模块
cart.js

import { Cart } from "~/models/cart";

const state = () => ({
    cart: new Cart()
})

const mutations = {
    ADD_ITEM(state, newItem) {
        console.log(state.cart)
    }
}

...
当调用
ADD\u ITEM(state,newItem)
mutation时,
getItem(articlernumber)
函数丢失,因此我收到
TypeError:state.cart.getItem不是一个函数
错误

这是控制台日志的结果:

__ob__: Object { value: {…}, dep: {…}, vmCount: 0 }
​
   _created: 
   _item:
   _lastUpdated:
   _ownerID:
这是我的设置的沙盒链接

有人知道我的问题吗


谢谢。

Vue只接受普通对象,只观察普通对象属性,它忽略
原型
属性。根据

对象必须是普通对象:忽略浏览器API对象和原型属性等本机对象

在您的例子中,您使用了一个
,它在prototype
(\uuu proto\uuuu)
中的普通对象和方法中创建变量,这就是为什么state无法找到
getItem
方法的原因。您需要使用
普通对象
而不是类


.

我已按要求更改了带有沙盒链接的帖子。问题仍然存在。我只是使用dispatch来触发一个触发我的变异的操作。根据这篇文章,你不能将类实例放在vuex存储中。你的代码在Vue/vuex中运行良好,但在Nuxt中不行。出于某种原因,Nuxt将原型继承信息从状态对象中剥离出来,这意味着它找不到该类创建的原型方法。(在没有Nuxt的Vue/Vuex中,没有
TypeError
getItem
工作。)它在Vue/Vuex中工作正常,只是没有Nuxt,所以这个解释不太正确。@Dan是的,你是对的,它也适用于met,但在。我认为这也是错误的。不是吗?文档链接讨论的是反应性,而不是存在性/可访问性。这意味着原型属性不会是被动的,这在很大程度上是正确的。他们没有提到的是,prototype属性至少是可访问的,并且可以在模板中使用,就像prototype方法
getItem
一样。在Nuxt中,它们甚至不可访问,也不存在,因为Nuxt似乎取消了其状态对象的原型链接,删除了所有原型继承。