Я ищу способ создания вложенных js-объектов одного и того же типа с функцией-fallbacking.Вложенные объекты JavaScript-объектов с сохранением свойств?
Я хотел бы быть в состоянии написать, например:
state.isLoggedIn и если этот объект не обладает этим свойством (неопределенным), то оно должно выглядеть в базовом состоянии и т.д., пока не корпус- состояния существуют больше, а затем возвращаются неопределенными.
В базовом состоянии я имею в виду другое состояние, в котором это состояние основано, а не наследуется, как наследование класса.
Я думал сделать какой-то класс, как это:
function State(base) {
this.base = base; // also a state
}
При попытке получить свойство Р из состояния А, который основан на другом состоянии В, и состояние А не определяет свойство P должно выглядеть в состоянии B вместо этого.
Я знаю, что могу использовать функцию типа state.getState (ключ), которая сначала ищет свои свойства, а затем в свойствах базы. Но я ищу способ сделать это с нормальными свойствами.
В 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; }
}
}
Есть идеи? Возможное?
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
Я не могу иметь разные классы состояний с предопределенными цепочками наследования. –