javascript - Vue,Vuex:访问嵌套反应类中的私有属性
问题描述
给定以下 Vuex 状态:
{
model: new Model
}
以下型号:
import { DataModel } from '@/foundation/data-model'
import { Child } from '@/models/child'
export class Model extends DataModel {
static defaults = {
name: null,
child: new Child
}
constructor(payload = null) {
super(Model.defaults)
if (payload) this.hydrate({
...payload,
child: new OtherModel(payload.child)
})
}
}
孩子:
import { DataModel } from '@/foundation/data-model'
export class Child extends DataModel {
static defaults = {
name: null
}
constructor(payload = null) {
super(Child.defaults)
this.hydrate(payload)
}
// other methods, setters, and getters.
}
和数据模型:
import { assign, cloneDeep } from 'lodash'
export class DataModel {
#noHistory = false
#originals = {}
constructor(payload = null, noHistory = false) {
this.#noHistory = noHistory
this.hydrate(payload || {})
}
hydrate(payload = null, withOriginals = true) {
if (!payload) return
if (!payload instanceof Object) throw 'DataModel: payload is not an object'
if (withOriginals && !this.noHistory) this.#originals = cloneDeep({ ...payload })
assign(this, cloneDeep({ ...payload }))
return this
}
get originals() {
return this.#originals
}
// other getters and methods
}
为什么我可以#originals
通过originals
root访问model
(在 Vuex 状态下),但model.child.#originals
不能通过model.child.originals
?
如果我尝试这样做,我会得到:
TypeError:试图在非实例上获取私有字段
model.originals // returns an object containing the original payload
model.child.originals // throws the TypeError
是否可能是由于 Vue 或 Vuex 包装对象以使其具有反应性的方式?如果是这样,为什么它只适用于model.child
而不适用model
,我该如何解决?
解决方案
推荐阅读
- javascript - 如何更好地回写而不是 .css()?
- java - 日期在 Amazon Corretto 11.0.9.11.2 中不解析
- angular - 为什么我使用 crypto-js 为不同的 pdf 文件获得相同的哈希?
- java - 运行我的应用程序时,我在运行时收到以下错误:java.lang.NoSuchMethodError: No virtual method setTokenProvider
- python - 为什么我在使用 sklearn R2 功能时会得到 nan?
- python - 考虑到标签,如何将多行合并为单行
- python - 用于将使用循环提取的文本附加到 Python 中的列表的多处理
- android - 客户在 Android 上使用 Google 登录时遇到错误 12500
- android - 可以在我的片段中调用我的 ViewModel 的方法并观察我的活动中的 MutableLiveData 吗?
- uwp - 应用程序在 UWP 中退出时如何做作业?