code: function(obj, key){
  		var getOwnKeyDescriptor = obj[canSymbol.for("can.getOwnKeyDescriptor")];
  		if(getOwnKeyDescriptor) {
  			return getOwnKeyDescriptor.call(obj, key);
  		} else {
  			return Object.getOwnPropertyDescriptor(obj, key);
  		}
  	}
docs: @function can-reflect.getOwnKeyDescriptor getOwnKeyDescriptor
  @parent can-reflect/shape
  @description Return a property descriptor for a named property on an object.
  
  @signature `getOwnKeyDescriptor(obj, key)`
  
  Return the key descriptor for the property key `key` on the Map-like object `obj`. A key descriptor
  is specified in ECMAScript 5 and contains keys for the property's `configurable` and `enumerable` states,
  as well as either `value` and `writable` for value properties, or `get` and `set` for getter/setter properties.
  
  The default behavior can be overridden by implementing [can-symbol/symbols/getOwnKeyDescriptor @@@@can.getOwnKeyDescriptor]
  on `obj`; otherwise the default is to call `Object.getOwnKeyDescriptor()`.
  
  ```js
  var foo = new DefineMap({ bar: "baz" });
  
  getOwnKeyDescriptor(foo, "bar"); // -> {configurable: true, writable: true, enumerable: true, value: "baz"}
  ```
  
  @param  {Object} obj Any object with named properties
  @param  {String} key The property name to look up on `obj`
  @return {Object}   A key descriptor object