native.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. module.exports = function (obj) {
  2. var addProperty = function (method, func) {
  3. String.prototype.__defineGetter__(method, func);
  4. };
  5. var stringPrototypeBlacklist = [
  6. '__defineGetter__',
  7. '__defineSetter__',
  8. '__lookupGetter__',
  9. '__lookupSetter__',
  10. 'charAt',
  11. 'constructor',
  12. 'hasOwnProperty',
  13. 'isPrototypeOf',
  14. 'propertyIsEnumerable',
  15. 'toLocaleString',
  16. 'toString',
  17. 'valueOf',
  18. 'charCodeAt',
  19. 'indexOf',
  20. 'lastIndexof',
  21. 'length',
  22. 'localeCompare',
  23. 'match',
  24. 'replace',
  25. 'search',
  26. 'slice',
  27. 'split',
  28. 'substring',
  29. 'toLocaleLowerCase',
  30. 'toLocaleUpperCase',
  31. 'toLowerCase',
  32. 'toUpperCase',
  33. 'trim',
  34. 'trimLeft',
  35. 'trimRight',
  36. 'gsub',
  37. ];
  38. Object.keys(obj).forEach(function (key) {
  39. if (key != 'inflect' && key != 'inflections') {
  40. if (stringPrototypeBlacklist.indexOf(key) !== -1) {
  41. console.log('warn: You should not override String.prototype.' + key);
  42. } else {
  43. addProperty(key, function () {
  44. return obj[key](this);
  45. });
  46. }
  47. }
  48. });
  49. };