object.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. var _ = require('../util')
  2. var objProto = Object.prototype
  3. /**
  4. * Add a new property to an observed object
  5. * and emits corresponding event
  6. *
  7. * @param {String} key
  8. * @param {*} val
  9. * @public
  10. */
  11. _.define(
  12. objProto,
  13. '$add',
  14. function $add (key, val) {
  15. if (this.hasOwnProperty(key)) return
  16. var ob = this.__ob__
  17. if (!ob || _.isReserved(key)) {
  18. this[key] = val
  19. return
  20. }
  21. ob.convert(key, val)
  22. ob.dep.notify()
  23. if (ob.vms) {
  24. var i = ob.vms.length
  25. while (i--) {
  26. var vm = ob.vms[i]
  27. vm._proxy(key)
  28. vm._digest()
  29. }
  30. }
  31. }
  32. )
  33. /**
  34. * Set a property on an observed object, calling add to
  35. * ensure the property is observed.
  36. *
  37. * @param {String} key
  38. * @param {*} val
  39. * @public
  40. */
  41. _.define(
  42. objProto,
  43. '$set',
  44. function $set (key, val) {
  45. this.$add(key, val)
  46. this[key] = val
  47. }
  48. )
  49. /**
  50. * Deletes a property from an observed object
  51. * and emits corresponding event
  52. *
  53. * @param {String} key
  54. * @public
  55. */
  56. _.define(
  57. objProto,
  58. '$delete',
  59. function $delete (key) {
  60. if (!this.hasOwnProperty(key)) return
  61. delete this[key]
  62. var ob = this.__ob__
  63. if (!ob || _.isReserved(key)) {
  64. return
  65. }
  66. ob.dep.notify()
  67. if (ob.vms) {
  68. var i = ob.vms.length
  69. while (i--) {
  70. var vm = ob.vms[i]
  71. vm._unproxy(key)
  72. vm._digest()
  73. }
  74. }
  75. }
  76. )