我正在寻找一种方法来创建与属性fallbacking相同类型的嵌套的js对象。嵌套相同类型的JavaScript对象与属性后备?
我希望能够写例如:
state.isLoggedIn如果这个对象没有这个属性(未定义),那么它应该在基础状态等,直到没有碱基状态已经存在,然后返回undefined。
有了基态,我的意思是这个状态基于的其他状态,而不是类继承的继承。
我想做出某种类的这样的:
function State(base) {
this.base = base; // also a state
}
当我试图从一个基于另一种状态B时的状态的属性P,以及状态的不定义一个属性P它应该在状态B中查看。
我知道我可以使用像state.getState(key)这样的函数,它先查看它自己的属性,然后再查找base-properties。但我正在寻找一种使用普通属性来完成此操作的方法。
在C#中它会是这个样子(并使其成为一个动态的对象,我会得到几乎excatly一样躲开了输入状态,我在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; }
}
}
任何想法?可能?
UPDATE:
这是我现在得到:
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
}
});
}
为什么不能继承?原型继承看起来就像你正在寻找的东西。 – bfavaretto 2013-04-23 17:12:18
我不能使用预定义的继承链具有不同的状态类。 – 2013-04-24 10:08:16