code: function(obj, eventName, callback, queue){
  		if(obj) {
  			var offEvent = obj[canSymbol.for("can.offEvent")];
  			if(offEvent !== undefined) {
  				return offEvent.call(obj, eventName, callback, queue);
  			}  else if(obj.removeEventListener) {
  				obj.removeEventListener(eventName, callback, queue);
  			}
  		}
  
  	}
docs: @function {Object, String, function(*)} can-reflect/observe.offValue offEvent
  @parent can-reflect/observe
  @description  Unregister an event handler on a MapLike object, based on a key change
  
  @signature `offEvent(obj, eventName, callback)`
  
  Unregister an event handler from the object `obj` that had previously been registered with
  [can-reflect/observe.onEvent onEvent]. The function passed as `callback` will no longer be called
  when the event named `eventName` is dispatched on `obj`.
  
  ```js
  var obj = new DefineMap({ foo: "bar" });
  var handler = function(ev, newVal, oldVal) {
  console.log("foo is now", newVal, ", was", oldVal);
  };
  
  canReflect.onEvent(obj, "foo", handler);
  canReflect.offEvent(obj, "foo", handler);
  
  canEvent.dispatch.call(obj, "foo", ["baz", "quux"]);  // -> nothing is logged
  ```
  
  @param {Object} obj the object to unbind an event handler from
  @param {String} eventName the name of the event to unbind the handler from
  @param {function(*)} callback the handler function to unbind from the event