我正在寻找一种方法来创建具有属性回退的相同类型的嵌套 js 对象。
我希望能够写例如:
state.isLoggedIn 并且如果这个对象没有这个属性(未定义),那么它应该查看基本状态等,直到不再存在基本状态,然后返回未定义。
对于基本状态,我的意思是该状态所基于的其他状态,而不是像类继承那样继承。
我正在考虑制作这样的课程:
function State(base) {
this.base = base; // also a state
}
当我尝试从基于另一个状态 B 的状态 A 获取属性 P 时,并且状态 A 没有定义属性 P,它应该改为查看状态 B。
我知道我可以使用像 state.getState(key) 这样的函数,它首先查看自己的属性,然后查看基本属性。但我正在寻找一种使用普通属性执行此操作的方法。
在 C# 中,它看起来像这样(并使其成为一个动态对象,我将得到几乎与我在 javascript 中寻找的相同的回避类型状态):
class State
{
public State(State base)
{
_base = base;
}
State _base;
Dictionary<string, object> _values = new Dictionary<string, object>();
public object this[string key]
{
get { return _values.ContainsKey(key) ? _values[key] : _base[key]; }
set { _values[key] = value; }
}
}
有任何想法吗?可能的?
更新:
这就是我现在得到的:
function State() {
}
function ViewModelBase() {
var self = this;
self.__parent = ko.observable(null);
self.state = new State();
self.parent = ko.computed({
read: function () {
return self.__parent();
},
write: function (value) {
if (getObjectClass(value) !== "ViewModelBase") throw new Error("Wrong type of parent.");
var p = self.__parent();
if (p != null) throw new Error("Allready parented.");
self.__parent(value);
// here i'd like to inherit/nest self.state with value.state
}
});
}