Я пытаюсь обернуть голову, используя связывание / триггер в сценарии наследования. Вот что я получил:
var MyApp = {};
MyApp.GrandParent = function (){
var self = Object.create({}), $self = $(self);
self.doFoo = function(){
console.log('Just to asure we can call from child to grandparent');
$(this).trigger('Happened');
//$self.trigger('Happened'); //Why doesn't it work this way
};
return self;
}
MyApp.Parent = function(){
var self = Object.create(MyApp.GrandParent()), $self = $(self);
self.doSomething = function(){
console.log('Just to asure we can call from child to parent');
$(this).trigger('SomethingHappened');
//$self.trigger('SomethingHappened'); //Why doesn't it work this way
};
return self;
}
MyApp.Child = function(){
var self = Object.create(MyApp.Parent()), $self = $(self);
$self.bind('SomethingHappened', function(){
console.log('Client logs: SomethingHappened');
});
$self.bind('Happened', function(){
console.log('Client logs: Happened');
});
return self;
}
var foo = new MyApp.Child();
foo.doSomething();
foo.doFoo();
Рабочий пример: http://jsfiddle.net/cburgdorf/8fWta/12/
Как видите, у нас есть цепочка наследования, начинающаяся от прародителя, а не от родителя к ребенку. Оно работает. Однако я просто не понимаю, почему я не могу вызвать события на объекте $ self. Неправильно стрелять по ним на $ (это).
То, что я хочу заархивировать, - это поддерживать цепочку прототипов в рабочем состоянии и запускать события для объекта $ self. Думаю, мне нужно использовать что-то вроде $ .proxy, но у меня действительно нет подсказки.
Я знаю, что я мог бы сделать это так http://jsfiddle.net/cburgdorf/8fWta/11/ но я бы предпочел, чтобы цепочка прототипов работала ...