Mam taki kod:

  1.  
  2. $.each(this._data.node_data, $.proxy(function(name, value) {
  3.  
  4. if ($.isFunction(value) && name.substr(0, 1) !== "_") {
  5.  
  6. this.node.prototype[name] = function() {
  7.  
  8. var event = new $.Event("before.node.btree");
  9. var result;
  10. var args = Array.prototype.slice.call(arguments);
  11.  
  12. result = $.btree._data.container.triggerHandler(event, {
  13. "method_name" : name,
  14. "instance" : $.btree,
  15. "args" : args
  16. });
  17.  
  18. if (result === false)
  19. return;
  20.  
  21. if (typeof result !== "undefined")
  22. args = result;
  23.  
  24. result = value.apply(
  25. $.extend({}, this, {
  26. _callback : function (data) {
  27. $.btree._data.container.triggerHandler( name + '.node.btree', {"instance" : $.btree, "args" : args, "data" : data});
  28. },
  29. _rollback : function () {
  30. rlbk = this.get_rollback();
  31. return rlbk;
  32. }
  33. }), args);
  34.  
  35. return result;
  36. }
  37. } else {
  38. this.node.prototype[name] = value;
  39. }
  40. }, this));
  41.  


this._data.node_data - to zwykły obiekt, klucze w nim to nazwy metod lub nazwy zmiennych, ktore beda w klasie this.n
ode, wartosci to wartosci zmiennych w klasie lub przyszle metody klasy.

this.node - to definicja klasy tylko, w tej petli wrzucamy w prototyp metody i zmienne przechowywane w this._data.node_data

ten kod dzialalby, jesli byloby samo:
this.node.prototype[name] = value;

ale potrzebuje rozszerzyc ta metode w taki sposob (z eventami), bo to bedzie mi dosyc potrzebne.

doszedlem do tego, ze kod jest zly w tym momencie:
$.extend({}, this, {

"this" nie odnosi sie do obecnej instancji klasy, tylko chyba do prototypu

pytanie brzmi: jak zmodyfikowac ten kod, zeby zachowac taka funkcjonalnosc i odniesc sie do obecnej instancji klasy?

kod sie uruchamia, ale nie zawsze jak robie w rozszerzanej metodzie np. this._opened = true to ta wartosc jest "gubiona" czy nie zapisywana w instancji tej klasy.