defineProp.js 707 B

1234567891011121314151617181920212223242526
  1. var castPath = require('./castPath');
  2. var isStr = require('./isStr');
  3. var isObj = require('./isObj');
  4. var each = require('./each');
  5. exports = function(obj, prop, descriptor) {
  6. if (isStr(prop)) {
  7. defineProp(obj, prop, descriptor);
  8. } else if (isObj(prop)) {
  9. each(prop, function(descriptor, prop) {
  10. defineProp(obj, prop, descriptor);
  11. });
  12. }
  13. return obj;
  14. };
  15. function defineProp(obj, prop, descriptor) {
  16. var path = castPath(prop, obj);
  17. var lastProp = path.pop();
  18. while ((prop = path.shift())) {
  19. if (!obj[prop]) obj[prop] = {};
  20. obj = obj[prop];
  21. }
  22. Object.defineProperty(obj, lastProp, descriptor);
  23. }
  24. module.exports = exports;