Delegator.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. var Class = require('./Class');
  2. var safeGet = require('./safeGet');
  3. var defineProp = require('./defineProp');
  4. var isStr = require('./isStr');
  5. exports = Class({
  6. initialize: function Delegator(host, target) {
  7. this._host = host;
  8. if (isStr(target)) {
  9. target = safeGet(host, target);
  10. }
  11. this._target = target;
  12. },
  13. method: function(name, targetName) {
  14. var target = this._target;
  15. var fn = target[targetName || name];
  16. this._host[name] = function() {
  17. return fn.apply(target, arguments);
  18. };
  19. return this;
  20. },
  21. getter: function(name, targetName) {
  22. var target = this._target;
  23. targetName = targetName || name;
  24. defineProp(this._host, name, {
  25. get: function() {
  26. return target[targetName];
  27. },
  28. configurable: true
  29. });
  30. return this;
  31. },
  32. setter: function(name, targetName) {
  33. var target = this._target;
  34. targetName = targetName || name;
  35. defineProp(this._host, name, {
  36. set: function(val) {
  37. return (target[targetName] = val);
  38. },
  39. configurable: true
  40. });
  41. return this;
  42. },
  43. access: function(name, targetName) {
  44. return this.getter(name, targetName).setter(name, targetName);
  45. }
  46. });
  47. module.exports = exports;