我正在尋找一種方法來創建與屬性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