Vuex状态内的Javascript类中缺少方法
我在Vuex旁边使用Nuxt framework在我的网站中存储数据,但当我想在状态中直接使用类时,我遇到了麻烦 模型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
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似乎取消了其状态对象的原型链接,删除了所有原型继承。